java 中怎么获得以该字符串命名的变量

 我来答
白卡PALA
2017-07-20 · 知道合伙人软件行家
白卡PALA
知道合伙人软件行家
采纳数:648 获赞数:3420
性能测试4年工作经验。

向TA提问 私信TA
展开全部

实现以上场景,在java中有多种方法,最直接方式的是通过反射获取,但是反射有较大的性能损耗,一般不建议用在运行阶段反射,大多开源框架是在初始化的时候通过反射来实例化。

1、通过反射获取

package test;

import java.lang.reflect.Field;

public class Demo2 {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
String op = "strA";
Test t = new Test();

// /通过类的字节码得到该类中声明的所有属性,无论私有或公有
        Field strs = Test.class.getDeclaredField(op);
        // 设置访问权限(这点对于有过android开发经验的可以说很熟悉)
        strs.setAccessible(true); 
        // 得到私有的变量值
        String[] as = (String[]) strs.get(t);
        
        
System.out.println(as.length);

}


}

class Test {
private String[] strA = new String[]{"a","b","c"}; 
private String[] strB = new String[]{"d","e","f"}; 
}


2、通过map设置获取

package test;

import java.util.HashMap;
import java.util.Map;

public class Demo2 {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {

Map<String,String[]> map = new HashMap<String,String[]>(); 
        map.put("strA", new String[]{"a","str","c"}); 
        map.put("strB", new String[]{"d","e","f"}); 
        String op = "strB"; 
        
        String result = map.get(op)[0]; // "d" 

}
}

以上两种方法虽然都能实现需求,但是在实际情况中还是得看具体的情况来界定选择。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式