我有这行代码:

String msg = "What's the capital in " + nyttLista.get(slumpLand).land + "?";


我想在.land.stad之间切换。我可以这样做而不必重复执行此行代码吗?

我尝试创建在和“ stad”之间切换的String

String i = "land";
nyttLista.get(slumpLand).i;


我可以做类似的事情吗?

最佳答案

您有几种选择,每种选择都有其优点和缺点。

最简单且几乎可以肯定适合您的用例的是简单的“ 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方法,该方法知道何时返回landstad。在内部,可以使用上述方法之一实现该方法,但调用者无需关心。我不知道决定landstad所需的逻辑,但这很可能是我建议的,是在内部使用if语句实现的。

10-06 03:43