0

説明:

オブジェクト名がわかりません。ここで問題が発生します。次のようなオブジェクトを作成しています。

`新しいオブジェクト(文字列属性);

次のような別のクラスでコードを実行しようとしています。

***.getStuff();

その秘訣は、オブジェクトに名前がないことです。しかし、私は文字列属性が何であるかを知っています

質問: 恐ろしい for ループを使わずにこれを達成する方法はありますか?


この質問は言葉にするのが少し難しいですが、最善を尽くします。私がしたいのは、面倒な for ループを作成することなく、特定のフィールドに一致するオブジェクトを取得することです。次のようなもの:

オブジェクト A にはフィールド String name があります。

String nameObj = "Tickle";

オブジェクトAの名前は「くすぐり」

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 クラスを使用せずに、親自体がインスタンスを追跡し、リストに保存します。

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 に答える