我有这行代码:
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
方法,该方法知道何时返回land
或stad
。在内部,可以使用上述方法之一实现该方法,但调用者无需关心。我不知道决定land
或stad
所需的逻辑,但这很可能是我建议的,是在内部使用if
语句实现的。