gpt4 book ai didi

Java:通过字符串更改代码

转载 作者:行者123 更新时间:2023-11-29 10:11:09 26 4
gpt4 key购买 nike

我有这行代码:

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

我想在 .land.stad 之间切换。我可以在不重复这行代码的情况下执行此操作吗?

我尝试创建一个在“land”和“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 在内部实现陈述。

关于Java:通过字符串更改代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com