2015-08-15 56 views
1

我有一个Field对象Field f,并且知道它是String的一个实例。如何将Field对象解析为字符串(Java)

我该如何将Field f解析为String s

我试图设置字段的值(这不起作用)。

我的代码:

Field[] fields=LanguageHandler.class.getDeclaredFields(); 
for(Field field:fields){ 
    if(field.getType().equals(String.class)){ 
    field.setAccessible(true); 
    try { 
     field.set(handler, ChatColor.translateAlternateColorCodes('&', cfg.getString(field.getName()))); 
    } catch (IllegalArgumentException | IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
} 

回答

2

场从来都不是一个String的实例。这是一个领域。你可能认为,Field存储一个字符串。你不解析字段,你只能访问它们。一个字段属于一个类,因此,为了获取/设置它,你必须给你想要从其中获取值(或设置为)作为参数的实际对象(除了静态字段,请参见下文)。

一个字段既可以是静态的,也可以不是静态的。例如...

class Something { 
private static String myField; // static 
private String myOtherField; // not static 
} 

如果是静态的,那么你不如果该字段不是静态需要一个对象来访问它,并会叫...

field.setAccessible(true); // to allow accessing it if private, etc. 
String s = (String)field.get(null); 

,那么你需要一个对象,其中外地有一定的价值,例如这样的事情...

Something mySomething = new Something(); 
something.setMyOtherField("xyz"); 

...你最终会调用...

field.setAccessible(true); // to allow accessing it if private, etc. 
String s = (String)field.get(something); // s == "xyz" 
+0

谢谢:) 如何设置字段的值? – Freakey

+0

Excatly以相同的方式,只是你想要设置为第二个参数的值(而不是null/something)。 –

+0

谢谢。接受你的问题。 :) – Freakey

相关问题