Caro amigos estou tentando pegar os fields da interface de uma classe, pois tenho declarado na interface constrantes e gostaria de pegar o nome e o valor …
Obrigado
Caro amigos estou tentando pegar os fields da interface de uma classe, pois tenho declarado na interface constrantes e gostaria de pegar o nome e o valor …
Obrigado
Qual a dificuldade? Pegar o valor de fields estáticos? Se sim, basta omitir o segundo parâmetro do método get:
public interface Test {
public static final String VALUE = "test";
}
public static void main( String[] bananinha ) throws Exception {
Class klass = Test.class;
Field field = klass.getField( "VALUE" );
String value = ( String ) field.get( null );
String fieldName = field.getName();
}
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Field.html#get(java.lang.Object)
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Field.html#getName()
Se quer pegar um array de objetos Field da interface, basta
Field[] fields = klass.getFields();
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getFields()
import java.lang.reflect.*;
interface FacaOQueEuDigoNaoFacaOQueEuFaco {
public static final int VALOR1 = -1;
public static final String VALOR2 = "Alô alô marciano \n!";
}
class TesteListaInterface {
public static String quoteString(String unquoted) {
StringBuffer ret = new StringBuffer();
ret.append ("\'");
for (int i = 0; i < unquoted.length(); ++i) {
char ch = unquoted.charAt(i);
switch (ch) {
case '\t':
ret.append ("\\t");
break;
case '\b':
ret.append ("\\b");
break;
case '\f':
ret.append ("\\f");
break;
case '\n':
ret.append ("\\n");
break;
case '\r':
ret.append ("\\r");
break;
default:
if (' ' <= ch && ch <= 126) {
ret.append (ch);
} else {
ret.append ("\\u" + Integer.toHexString ((ch & 0xFFFF) | 0x10000).substring(1).toUpperCase());
}
}
}
ret.append ("\'");
return ret.toString();
}
public static void main(String[] args) throws Exception {
Class cl = FacaOQueEuDigoNaoFacaOQueEuFaco.class; // só para simplificar um pouco a demonstração
Field[] fields = cl.getDeclaredFields();
for (int i = 0; i < fields.length; ++i) {
Field f = fields[i];
if (Modifier.isStatic (f.getModifiers())) { // todos os campos são estáticos, só estou sendo "cri-cri"
System.out.print ("public static final ");
Class clF = f.getType();
if (clF.equals (int.class)) {
System.out.println ("int " + f.getName() + " = " + f.getInt(null));
} else if (clF.equals (char.class)) {
System.out.println ("char " + f.getName() + " = (char)" + (int) f.getChar(null));
} else if (clF.equals (short.class)) {
System.out.println ("short " + f.getName() + " = (short)" + f.getShort(null));
} else if (clF.equals (long.class)) {
System.out.println ("long " + f.getName() + " = " + f.getLong(null) + "L");
} else if (clF.equals (float.class)) {
System.out.println ("float " + f.getName() + " = " + f.getFloat(null) + "f");
} else if (clF.equals (double.class)) {
System.out.println ("double " + f.getName() + " = " + f.getDouble(null));
} else if (clF.equals (String.class)) {
System.out.println ("String " + f.getName() + " = " + quoteString ((String)f.get(null)));
} else {
System.out.println (f.getType() + " " + f.getName() + " = ...;");
}
}
}
}
}
Deve imprimir:
public static final int VALOR1 = -1
public static final String VALOR2 = 'Al\u00F4 al\u00F4 marciano \n!'
Dei uma olhada em casa exemplo acima e consegui fazer o que eu desejava… muito obrigado pelas dicas…