Java:获取类中的所有对象

时间:2012-05-14 17:16:14

标签: java class object

我有一个看起来像这样的课程:

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 个答案:

答案 0 :(得分:4)

如果您可以在编译时列出该类的所有可能实例,use an 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
            }
        }
    }
}

答案 1 :(得分:2)

为什么不使用List<Item>?您可以将列表设为static,但我不确定您为什么需要它static

然后你可以这样做:

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

请注意,您无法使用==比较字符串(或任何对象);你必须使用.equals()。对于String,您还可以使用.compareTo()。使用==时,您只需比较参考。此外,使用访问者而不是在textStringItem上创建public属性。

答案 2 :(得分:0)

使用数组或列表。如果您担心100多个项目的硬编码,那么您做错了。从文本文件或其他东西中读取它们。但是尝试使用新对象而不是数组或列表,当你想要的是数组或列表的功能时,就没有多大意义。

答案 3 :(得分: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以满足任何需要它。