3

私は次のようなクラスを持っています:

public class Items {
    String uselessText;
    public static final Item COW = new Item("text", 0);
    public static final Item CAT = new Item("abc", 1);
    public static final Item DOG= new Item("wow", 2);
        ...SO on

    public void search(String search) {
          for(every Item in this Class) {
              if(item.textString == "abc") {
                 //DO SOMETHING
              }
          }

        }

これは可能ですか?そして、ありがたいことに、私は配列を実行したくありません(100を超えるアイテムがあり、静的アクセスが必要なため)

何か案が?

乾杯

4

4 に答える 4

4

コンパイル時にクラスの可能なインスタンスをすべてリストできる場合はenum .

public enum Items {

    COW("text", 0),
    CAT("abc", 1),
    DOG("wow", 2),
    // ...
    ;

    private final String textString;
    private final int number;

    private Item(String textString, int number) {
        this.textString = textString;
        this.number = number;
    }

    public void search(String search) {
        for(Item : values()) {
            if("abc".equals(item.textString)) {
                //DO SOMETHING
            }
        }
    }
}
于 2012-05-14T17:19:09.527 に答える
2

なぜ使用しないのList<Item>ですか?staticなぜそれが必要なのかはわかりませんが、リストを にすることができますstatic

次に、次のことができます。

for(Item item : items) {
    if("abc".equals(item.getTextString())) {
        //Do something
    }
}

==;を使用して文字列 (または任意のオブジェクト) を比較できないことに注意してください。を使用する必要があります.equals()。にはString、 も使用できます.compareTo()。を使用するとき==は、参照を比較しているだけです。textStringまた、プロパティを onItemにする代わりに、アクセサーを使用しますpublic

于 2012-05-14T17:17:56.250 に答える
0

配列またはリストを使用します。100 を超えるアイテムをハードコーディングすることに懸念がある場合は、それが間違っています。テキストファイルなどからそれらを読み取ります。しかし、配列やリストの機能が必要な場合に、配列やリストの代わりに新しいオブジェクトを使用しようとしても、あまり意味がありません。

于 2012-05-14T17:20:05.760 に答える
0

配列を使用したくない場合、または少なくとも反復可能なものを使用したくない場合は、作業必要以上に難しくなります。

たとえば、 を使用して目的を達成するコードを次に示しますArrayList<String>

public class Items {
    ArrayList<Item> itemSet = new ArrayList<Item>();
    // Code to fill in itemSet - involves itemSet.add(new Item("text", 0)), etc.

    public void search(String search) {
        for(Item i: itemSet) { // Enhanced for-loop, iterates over objects
            if ("abc".equals(i.textString)) {
                // do something
            }
        }
    }
}

これらのオブジェクトに静的にアクセスすることは意味がありません。このオブジェクトからそれを返したい場合は、配列またはArrayList必要なもののいずれかを返すアクセサーを使用できます。

于 2012-05-14T17:25:48.117 に答える