我有这行代码:
String msg = "What's the capital in " + nyttLista.get(slumpLand).land + "?";
我想在.land
和.stad
之间切换。我可以这样做而不必复制这行代码吗?
我尝试创建一个String
,在" land"之间切换。和" stad":
String i = "land";
nyttLista.get(slumpLand).i;
我可以做类似的事吗?
答案 0 :(得分:3)
您有几个选择,每个选项都有各自的优缺点。
最简单,几乎肯定适合您的用例是简单的“if”语句。
SomeObject obj = nyttLista.get(slumpLand);
String value;
if(<some condition>) {
value = obj.land;
} else {
value = obj.stad;
}
String msg = "What's the capital in " + value + "?";
如果是直接的,可读但有点冗长,如果你添加了许多不同的条件,它将会爆炸。
您可以使用三元运算符:
缩短时间SomeObject obj = nyttLista.get(slumpLand);
String msg = "What's the capital in " + (<some condition> ? obj.land : obj.stad) + "?";
但是以可读性和可扩展性为代价(后者可能对您不重要)。
您可以使用反射:
String fieldToUse = <some logic to return "land" or "stad".
Field field = SomeObj.class.getField(fieldToUse);
SomeObject obj = nyttLista.get(slumpLand);
"What's the capital in " + field.get(obj).toString() + "?";
我不会在这个用例中这样做,但是当你有TEH DYNAMICS时它会很有用(这是非常罕见的,你可以忽略这个选项)。
如果使用Java 8,您可以使用功能和其他有趣的东西(或Strategy pattern)。但实际上只适用于lolz。
Function<SomeObject, String> using;
if(<some condition>) {
using = (a) => a.land;
} else {
using = (a) => a.stad;
}
"What's the capital in " + using.apply(nyttLista.get(slumpLand)) + "?";
当您有许多不同的选项或希望传递部分算法时,它非常有用。
您可以使用规则引擎,但我们在反思中变得愚蠢。当你有很多规则时很好,但在上面的问题中毫无意义。
你可以推动逻辑。因此SomeObject
有一个getThingie
方法,知道何时返回land
或stad
。在内部,它将使用上述之一实现,但调用者不需要关心。我不知道决定land
或stad
所需的逻辑,但这可能是我推荐的,使用if
语句在内部实现的。
答案 1 :(得分:2)
不,你想要实现它的方式是不可能的。
但你可以像这样写。基本上,它不是直接访问变量,而是使用带变量的方法作为参数。基于此参数,可以使用常量标志传递,它将确定它将返回的内容。
public class Test {
private String a = "A";
private String b = "B";
public static final int LAND = 0;
public static final int STAD = 1;
public static void main(String[] args) {
Test test = new Test();
int option = Test.LAND;
System.out.println(test.getValue(option));
option = Test.STAD;
System.out.println(test.getValue(option));
}
public String getValue(int option) {
if(option == LAND) {
return a;
} else if (option == STAD) {
return b;
}
return null;
}
}
答案 2 :(得分:2)
您可以使用反射来完成此任务。
将变量名存储在一个变量中,就像我的情况一样,它是'variabeName',并且根据该变量的值,您将获得相应fieeld的值。
Halaqati_Test2.RingID = view_stdwithrings.rg_id
答案 3 :(得分:1)
您可以执行以下操作:
String msg = "What's the capital in " +
(i.equals("land") ?
nyttLista.get(slumpLand).land :
nyttLista.get(slumpLand).stad)
+ "?";