iteye_1501 2011-05-30 16:22
浏览 273
已采纳

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

有一个常量类,如下:
[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的对象似乎很没必要,但是对反射不是很了解,问该怎么修改

  • 写回答

3条回答 默认 最新

  • xiaoyingSUN 2011-05-30 21:31
    关注

    [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;          
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺