从Field获取对象

时间:2013-02-24 22:28:12

标签: java object field

澄清:

我不知道对象名称。这就是问题所在。我正在创建一个像这样的对象:

`new Object(String attributes);

我正在尝试在另一个类中运行代码,例如:

***.getStuff();

诀窍是,对象没有名称。但我知道什么是String属性

问题:如果不使用可怕的for循环,有没有办法实现这一目标?


这个问题有点棘手,但我会尽我所能。我想要的是获得一个匹配特定字段的对象,而不会使循环混乱。有点像:

对象A具有字符串名称。

String nameObj = "Tickle";

对象A的名称为“Tickle”

if(nameObj.equals(Object A)){
//bla bla
}

非常混乱的措辞,是的。对于那个很抱歉。我想在我的代码中使用对象A而不必弄清楚它是哪个对象,假设我拥有的只是它的名字。我想,我正在寻找使用for循环的捷径。

随时提出有关我正在寻找的问题的问题。抱歉这个措辞严厉的问题。

编码不好,但这就是我要找的......

nameObj.getName().getObjectA();

3 个答案:

答案 0 :(得分:4)

如果您有一堆带有名称的对象,并且您想要按其名称获取对象,我建议您查找班级HashMapHashMap允许您在键下放置对象,当您为哈希映射提供键时,它将返回与该键关联的对象。因此,在您的示例中,键将是字符串名称。

答案 1 :(得分:0)

采用这个实现,它演示了@Patashu所说的,创建了一个对象的映射,在这种情况下,我只是在所有的顶部添加一个抽象类。

import java.util.HashMap;

public class FindMeBaby {

    public static void main(String[] args) {
        Factory.add(new NiceGuy("first one"));
        Factory.add(new FirstChild("ok im late"));

        System.out.println(Factory.get("first one")
                .getVeryImportantInformationThatOnlyThisClassKnows());

    }
}


abstract class ParentOfAll {
    protected String id;

    public ParentOfAll(String id) {
        this.id = id;
    }

    public  String getId(){
        return id;
    }

    public abstract String getVeryImportantInformationThatOnlyThisClassKnows();

}

class FirstChild extends ParentOfAll {

    public FirstChild(String id) {
        super(id);
    }

    public String getVeryImportantInformationThatOnlyThisClassKnows() {
        return "this is a secret";
    }
}

class NiceGuy extends ParentOfAll {

    public NiceGuy(String id) {
        super(id);
    }

    public String getVeryImportantInformationThatOnlyThisClassKnows() {
        return "to say the true, i'm not that nice :)";
    }

}

class Factory {
    private static HashMap allTheObjects = new HashMap();

    public static Object add(ParentOfAll object) {
        allTheObjects.put(object.getId(), object);
        return object;
    }

    public static ParentOfAll get(String key) {
        return (ParentOfAll) allTheObjects.get(key);
    }
}

答案 2 :(得分:0)

这是另一个版本,具有更透明的aproach的相同实现,没有Factory类,Parent本身将跟踪实例并保存在列表中。

import java.util.HashMap;

public class FindMeBaby {

    public static void main(String[] args) {
        NiceGuy foo = new NiceGuy("first one");
        FirstChild bar = new FirstChild("ok im late");

        System.out.println(ParentOfAll.get("first one")
                .getVeryImportantInformationThatOnlyThisClassKnows());

    }
}

abstract class ParentOfAll {
    protected String id;

    public ParentOfAll(String id) {
        this.id = id;
        add(this);
    }

    public String getId() {
        return id;
    }

    public abstract String getVeryImportantInformationThatOnlyThisClassKnows();

    private static HashMap allTheObjects = new HashMap();

    private static Object add(ParentOfAll object) {
        allTheObjects.put(object.getId(), object);
        return object;
    }

    public static ParentOfAll get(String key) {
        return (ParentOfAll) allTheObjects.get(key);
    }

}

class FirstChild extends ParentOfAll {

    public FirstChild(String id) {
        super(id);
    }

    public String getVeryImportantInformationThatOnlyThisClassKnows() {
        return "this is a secret";
    }
}

class NiceGuy extends ParentOfAll {

    public NiceGuy(String id) {
        super(id);
    }

    public String getVeryImportantInformationThatOnlyThisClassKnows() {
        return "to say the true, i'm not that nice :)";
    }

}