例如:
class A{
String name;
int age;
}
现在有一个String变量 var,如果var的值为name,如何通过var来访问name,也就是说,如果var的值与类A中的某个字段相同,
则通过var来调用类A的属性,能做到吗?
class A{
String name;
int age;
}
现在有一个String变量 var,如果var的值为name,如何通过var来访问name,也就是说,如果var的值与类A中的某个字段相同,
则通过var来调用类A的属性,能做到吗?
有点不明白
你的意思是指 var == a.name?
调用 a的某个属性指的是什么?
A.name等同于A.var能做到吗?
你直接 A.name=var不就行了吗??
可以A.setName("var") 在 A.getName()
你的意思是指 var == a.name?
调用 a的某个属性指的是什么?
是 var.equals("name"),也就是var本身就是"name"字符串,而类A的一个属性是name
可以把A的属性name赋值给临时变量var,但是改变name的属性,var的值是不会改变的
反过来说改变var的值也不会改变name的值,因为String类是immutable的
var的值是A类的一个属性名对吧。。这个不能调用的。。
A的属性属于A,var的值属于var,内容即使一样两者也没什么关系
Class A{
String name;
String address
String email;
}
var 也是String类型,如果 var的值是"name"那么我就调用A.name,
如果var的值是"address"那么我就调用A.address,
如果var的值是email我就调用A.email,
也就是说对A属性的调用并不明确,需要通过var的值来决定调用哪个属性。
但是不能写成if(var.equals("name")){A.name}
else if(var.equals("address")){A.address}
else {A.email}
因为将来如果类A再增加新的属性,程序还要修改。
String name="ZhangSan";
int age=18;
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
}
class B{
public static void main(String[] args){
B b = new B();
b.run("s");
}
public void run(String ver)
{
A a = new A();
Class objClass = a.getClass();
String verTmp = ver.substring(0,1).toUpperCase();
String methodName = "get"+verTmp+ver.substring(1,ver.length());
try
{
Method objMethod = objClass.getMethod(methodName, null);
System.out.println(ver+"="+objMethod.invoke(a, null));
}
catch(Exception e){
System.out.println("Can`t find \""+ver+"\"!");
}
}
}
楼主的想法14楼已经帮你解决了的。。
就是用反射你可以拿到Field[](属性数组)然后通过var的值来判断
再调用相关的方法。。 String var = "name";
A a = new A();
Field[] fields = a.getClass().getDeclaredFields();
String methodName = "";
String fieldName = "";
for(int i = 0 ; i < fields.length; i++) {
// System.out.println(fields[i].getName());
fieldName = fields[i].getName();
if(var.equals(fieldName)) {
methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
Method m = a.getClass().getMethod(methodName, null);
System.out.println(m.invoke(a, null));
}
}