繁体   English   中英

通过名称获取实例变量

[英]Get instance variable by its name

我有两个班,A和B。

B包含A的实例。我想按其名称从B返回A的实例:

class A
{
    public String name;

    public A (String name)
    {
        this.name = name;
    }
}

class B
{
    public A a1;
    public A a2;
    public A a3;

    public B ()
    {
        this.a1 = new A ("a1");
        this.a2 = new A ("a2");
        this.a3 = new A ("a3");
    }

    public A get_A_byName (String name)
    {
        // Is it possible to write something like this? B will always contain only instances of A
        for (A a : B.variables)
        {
            if (a.name.equals(name))
            {
                return a;
            }

            // Or in case A doesn't have a variable "name", can I get an A instance by its declared name in B?
            if (a.getClass().getName().equals(name))
            {
                return a;
            }
        }
    }
}

是否可以执行代码注释中描述的操作? 提前致谢。

这是为将键(在这种情况下为字符串)与对象配对而创建的哈希图的多少

class B
{
    private HashMap<String,A> theAs=new HashMap<String,A>(); //give better name


    public B ()
    {
        theAs.put("a1",new A ("a1")); //A probably doesn't need to keep its own name internally now, but have left it as its in your original code
        theAs.put("a2",new A ("a2"));
        theAs.put("a3",new A ("a3"));
    }

    public A get_A_byName (String name)
    {
        return theAs.get(name);
    }
}

笔记

  • 在Java 7+中,您不需要添加第二个<String,A> ,菱形推断就可以了,因此在Java 7或更高版本中,它将是:

     private HashMap<String,A> theAs=new HashMap<>(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM