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属性。Itempublic

于 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 回答