java 中怎么获得以该字符串命名的变量
展开全部
实现以上场景,在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"
}
}
以上两种方法虽然都能实现需求,但是在实际情况中还是得看具体的情况来界定选择。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询