0

澄清:

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

`新对象(字符串属性);

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

***.getStuff();

诀窍是,对象没有名称。但我确实知道字符串属性是什么

问题:有什么方法可以在不使用可怕的 for 循环的情况下实现这一点?


这个问题说起来有点棘手,但我会尽力而为。我想要的是获得一个与特定字段匹配的对象,而不会造成混乱的 for 循环。类似于以下内容:

对象 A 具有字段字符串名称。

String nameObj = "Tickle";

对象 A 的名称为“Tickle”

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

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

随时询问有关我在寻找什么的问题。对不起这个措辞可怕的问题。

糟糕的编码,但这就是我正在寻找的......

nameObj.getName().getObjectA();
4

3 回答 3

4

如果你有一堆有名字的对象,并且你想通过它的名字来抓取一个对象,我建议你查一下 class HashMapHashMap允许您将对象放在键下,当您为哈希映射提供键时,它会返回与该键关联的对象。因此,在您的示例中,键将是字符串名称。

于 2013-02-24T22:32:27.030 回答
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);
    }
}
于 2013-02-24T22:54:15.947 回答
0

这是另一个版本,具有更透明的方法的相同实现,没有 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 :)";
    }

}
于 2013-02-24T22:58:53.557 回答