Tôi đã thêm tệp cấu hình có thể đọc được vào ứng dụng của mình bằng cách sử dụng java.util.Properties
và đang cố gắng thêm trình bao bọc xung quanh nó để làm cho chuyển đổi loại dễ dàng hơn. Cụ thể, tôi muốn giá trị trả về "kế thừa" là loại giá trị mặc định được cung cấp. Đây là những gì tôi đã có cho đến nay:Làm thế nào tôi có thể khởi tạo một loại chung trong Java?
protected <T> T getProperty(String key, T fallback) {
String value = properties.getProperty(key);
if (value == null) {
return fallback;
} else {
return new T(value);
}
}
Giá trị trả về từ getProperty("foo", true)
sau đó sẽ là một boolean bất kể nó được đọc từ các thuộc tính tập tin và tương tự cho các chuỗi, số nguyên, đôi, & c. Tất nhiên, đoạn mã trên không thực sự biên dịch:
PropertiesExample.java:35: unexpected type
found : type parameter T
required: class
return new T(value);
^
1 error
Tôi làm điều này sai, hay tôi chỉ đơn giản là cố gắng làm điều gì đó không thể làm được?
Edit: Cách sử dụng Ví dụ:
// I'm trying to simplify this...
protected void func1() {
foobar = new Integer(properties.getProperty("foobar", "210"));
foobaz = new Boolean(properties.getProperty("foobaz", "true"));
}
// ...into this...
protected void func2() {
foobar = getProperty("foobar", 210);
foobaz = getProperty("foobaz", true);
}
Ngay cả với một hàm tạo mặc định, tốt hơn là sử dụng đối tượng 'Constructor' hơn là sử dụng' Class.newInstance() '. Việc xử lý lỗi là khác nhau; sử dụng phương thức 'Lớp', một số ngoại lệ được báo cáo với một kiểu gây hiểu lầm. Phương thức 'Constructor' phù hợp với các lời gọi động khác. – erickson
@Kublai Khan - Hoạt động! Thậm chí tốt hơn, tôi đã có thể nhận được 'klazz' là' Class klazz = (Class ) fallback.getClass(); 'để loại bỏ tham số phụ. Cám ơn rất nhiều về sự giúp đỡ của bạn! ** Edit: ** Tôi đã bắt đầu tự hỏi về bộ nhớ đệm ngay sau khi phản ánh bước vào hình ảnh; Tôi sẽ xem xét các khối tĩnh cho điều đó. –
Vui vì tôi có thể giúp đỡ. Chỉ cần ghi nhớ rằng tất cả các tra cứu động bằng cách sử dụng phản ánh là khá tốn kém vì chúng không thể được tối ưu hóa tại thời gian biên dịch. –