我有一个看起来像这样的课程:
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项,我希望它们是静态访问)
有什么想法吗?
干杯
答案 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()
。使用==
时,您只需比较参考。此外,使用访问者而不是在textString
,Item
上创建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
以满足任何需要它。