2010-05-19 19 views
11

básicamente necesito obtener una constante para una clase, pero no tengo ninguna instancia del objeto, pero solo su clase. En PHP Haría constant(XYZ); ¿Hay alguna manera similar de recuperar una constante en JAVA?cómo obtener una constante en Java con la clase

lo necesito para facilitar una llamada getMethod dinámica

Class parameterType = Class.forName(class_name); 
object.setProperty(field name, field value, parameterType); 

el método de conjunto de propiedades sería entonces obtener el método correcto y establezca la propiedad especificada, sin embargo no puedo conseguir un método que tiene int como tipo de parámetro sin utilizar Interger.TYPE

Respuesta

0

No estoy seguro de lo que quiere salir. Pero no debería ser demasiado difícil mostrarle un ejemplo.

Digamos que tiene un Class Foo con barra de propiedades.

Class Foo { 
    private final String bar = "test"; 
    public String getBar() {return bar;} 
} 

Ahora para conseguir esto a través de la reflexión que lo haría:

Class fooClass = Foo.class; 
Object fooObj = fooClass.newInstance(); 
Method fooMethod = fooClass.getMethod("getBar"); 
String bar = (String) fooMethod.invoke(fooObj); 

Ahora usted conseguirá valor del método GetBar() en la variable de barras

2

Si esta constante es metadatos acerca de la clase, 'd hacer esto con annotations:

primer paso, declarar la anotación:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
@interface Abc { 
    String value(); 
} 

Paso dos, anotar su clase:

@Abc("Hello, annotations!") 
class Zomg { 

} 

El tercer paso, recuperar el valor:

String className = "com.example.Zomg"; 
Class<?> klass = Class.forName(className); 
Abc annotation = klass.getAnnotation(Abc.class); 
String abcValue = annotation.value(); 
System.out.printf("Abc annotation value for class %s: %s%n", className, abcValue); 

de salida es:

Abc annotation value: Hello, annotations!
0

Tal vez no lo entienden lo necesita, pero ¿lo intentó con los atributos estáticos finales y los métodos estáticos?

Final significa que no se puede cambiar una vez configurado, por lo que obtienes una constante. Estático significa que es accesible incluso si no hay ningún objeto de la clase.

28

Es posible que busque algo. como
Foo.class.getDeclaredField("THIS_IS_MY_CONST").get(null); o Class.forName("Foo").getDeclaredField("THIS_IS_MY_CONST").get(null); (gracias f-o-o)

Obtiene el valor de una constante de cadena (THIS_IS_MY_CONST) en la clase Foo.

actualización uso null como argumento para get gracias acdcjunior

+1

Tenga en cuenta que el argumento 'String.class' pasado al campo' # get (Objeto) 'método es discutible para los campos estáticos - por el Javadoc: > Si el campo subyacente es un campo estático, el argumento obj se ignora; puede ser nulo. Por lo tanto, el argumento no implica que el valor del campo será una Cadena y podría ser nulo. – superEb

+4

Dado que es un campo "estático", 'Foo.class.getDeclaredField (" MY_CONST "). Get (null);' es la forma correcta de obtener su valor. (El argumento 'String.class' en la respuesta se ignora y en realidad es engañoso.) – acdcjunior

+0

¿Qué sucede si no sabes qué es Foo? Creo que Class.forName ("Foo") sería más ideal. –

Cuestiones relacionadas