定义一个读取常量的工具类(希望能帮我改进一下)

有一个常量类,如下:
[code="java"]public class Constants {
public static final String AA = "aa";

public static final String BB = "bb";

public static final String CC = "cc";

}[/code]

现在要写一个读取常量的工具类,我实现的写法如下:
[code="java"]import java.lang.reflect.Field;
import Constants;
public class ConstantsUtil {
public static String get(String key){
Constants c=new Constants();
Field[] fields = c.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
String varName = fields[i].getName();
if(varName.equals(key)){
try {
Object o = fields[i].get(c);
return o.toString();
} catch (Exception e){

}
}
}
return null;
}
}[/code]
但是感觉get()方法执行过程中先创建一个Constants的对象似乎很没必要,但是对反射不是很了解,问该怎么修改

[quote]可是如果不new的话,Java代码

Object o = fields[i].get(c);

Object o = fields[i].get(c); 该怎么换一种写法实现一样的功能呢?这里的get()方法需要传一个对象进去啊 [/quote]

一开始直接用getFields 然后get就好
get(object)这个方法如果你field定义是static,正如你写的AA BB CC都是static final,
object就忽略,直接写null
-------------------代码------------------------------

Field[] fields = Constants.class.[color=red]getFields(); [/color]

String o =null;

for(int i=0;i<fields.length;i++){

String varName = fields[i].getName();

 if(varName.equals(key)){                    
    try {
     [color=red]  o = fields[i].get(null).toString();[/color]   } catch (Exception e) {             
e.printStackTrace();
} 
   }
}
return o;          

}

[code="java"]
import java.lang.reflect.Field;

import Constants;

public class ConstantsUtil {

public static String get(String key){

Field[] fields = Constants.class.getDeclaredFields();

for(int i=0;i<fields.length;i++){

String varName = fields[i].getName();

if(varName.equals(key)){

try {

Object o = fields[i].get(c);

return o.toString();

} catch (Exception e){

}

}

}

return null;

}

}

[/code]
没有必要new,你说的很对。其实有三种方法获得class,下面是具的列子:
[code="java"]
//Use the class literal
Class string=java.lang.String.class;
//Call the forName() static method of java.lang.Class
Class string=Class.forName("java.lang.String");
//Call the getClass() method of an object
Class string="a String object".getClass();

[/code]

[quote]该怎么换一种写法实现一样的功能呢?这里的get()方法需要传一个对象进去啊 [/quote]
[code="java"]Object o = fields[i].get(Constants.class.newInstance()); [/code]获取该对象的实例。希望对你有帮助。 :D