(在java中)这可能是也可能是不可能的,我认为这是因为它似乎是短路/容易不存在。基本上我想要做的是让用户插入状态的名称,然后将其添加到该状态的计数器,该计数器存储在不同的类中。我想这样做而不创建50个if / else语句。这是伪代码,表示我期望它如何完成。 (此代码将封装在mainclass.java中的while循环中,计数器和状态名称位于名为state.java的类中。)
Scanner userstate = new Scanner(System.in);
String statename = userstate.nextLine();
state.(statename).counter++;
在state.java中:
public state(int counter){
}
public static state Alabama = new state(0);
为了时间的缘故,我希望有一个类似于上面的捷径。
答案 0 :(得分:2)
在这种情况下,首选的方法是将状态存储在HashMap或类似的地方。这允许您按名称查找状态:
import java.util.*;
class State
{
static HashMap<String, State> states = new HashMap<String, State>();
public static State Alabama = new State("Alabama", 0);
public State(String name, int counter)
{
// [ init... ]
states.put(name, this); // add this state to the collection of states
}
public static State getByName(String name)
{
return states.get(name);
}
}
然后你的代码看起来像这样:
State.getByName(statename).counter++;
您也可以使用reflection,但应尽可能避免使用。
答案 1 :(得分:0)
您不希望尝试按其Java名称查找变量(例如,“Alabama”);这是可能的,但比你想要处理的要复杂得多。
如果您可以使用外部库,这非常适合Guava Multiset
,它可以跟踪某个元素被看到的次数。否则,您可能希望从州名称Map<String,Integer>
到计数器。 (请注意,在这种情况下您必须put(get()+1)
; ++
将不起作用。)