例如:
class A{
 String name;
 int age;
}
现在有一个String变量 var,如果var的值为name,如何通过var来访问name,也就是说,如果var的值与类A中的某个字段相同,
则通过var来调用类A的属性,能做到吗?

解决方案 »

  1.   


    有点不明白
    你的意思是指 var == a.name?
    调用 a的某个属性指的是什么?
      

  2.   

    楼主的意思是var的值等于name?还好似var的值等于name的值?
      

  3.   

    if(var.equals("name"))
     A.name等同于A.var能做到吗?
      

  4.   

    做不到,var 不是A的属性
    你直接 A.name=var不就行了吗??
      

  5.   


    可以A.setName("var") 在 A.getName()
      

  6.   

    发表于:2009-06-18 14:52:391楼 得分:0 有点不明白 
    你的意思是指 var == a.name? 
    调用 a的某个属性指的是什么? 
    是 var.equals("name"),也就是var本身就是"name"字符串,而类A的一个属性是name
      

  7.   

    似乎有点明白LZ的意思了
    可以把A的属性name赋值给临时变量var,但是改变name的属性,var的值是不会改变的
    反过来说改变var的值也不会改变name的值,因为String类是immutable的
      

  8.   

    这下应该明白了汗。。
    var的值是A类的一个属性名对吧。。这个不能调用的。。
    A的属性属于A,var的值属于var,内容即使一样两者也没什么关系
      

  9.   

    11楼严重曲解。
    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再增加新的属性,程序还要修改。
     
      

  10.   

    class 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+"\"!");
    }
    }
    }
      

  11.   

    不好意思我完全误解了。。
    楼主的想法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));
               }
           }