Giả sử bạn có một tập tin văn bản như:Java: instantiating một enum sử dụng phản ánh
my_setting = ON
some_method = METHOD_A
verbosity = DEBUG
...
đó bạn muốn cập nhật một đối tượng tương ứng cho phù hợp:
Setting my_setting = ON;
Method some_method = METHOD_A;
Verbosity verbosity = DEBUG;
...
đâu tất cả đều loại khác nhau của enums .
Tôi muốn có một cách chung để khởi tạo các giá trị enum. Đó là, tại thời gian chạy sử dụng sự phản chiếu, và không biết trước các loại enum của đối tượng.
Tôi cũng nghĩ tới một cái gì đó như thế này:
for (ConfigLine line : lines)
{
String[] tokens = line.string.split("=", 2);
String name = tokens[0].trim();
String value = tokens[1].trim();
try
{
Field field = this.getClass().getDeclaredField(name);
if(field.getType().isEnum())
{
// doesn't work (cannot convert String to enum)
field.set(this, value);
// invalid code (some strange generics issue)
field.set(this, Enum.valueOf(field.getType().getClass(), value));
}
else
{ /*...*/ }
}
catch //...
}
Câu hỏi đặt ra là: những gì nên có thể thay thế? Thậm chí có thể tạo ra một enum không xác định cho biểu diễn chuỗi của nó không?
Phunky! (8 nhiều hơn để đi) –
kết quả này trong một lỗi trình biên dịch generics: Phương pháp valueOf (Class, String) trong loại Enum không áp dụng cho các đối số (Class , Object) –
onejigtwojig
Trình biên dịch nào? .. – Bozho