程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号


关注本站官方公众号:程序员总部,领取三大福利! 福利一:python和前端辅导 福利二:进程序员交流微信群,专属于程序员的圈子 福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,java大神匠心打造,零基础java开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Java:按字符串更改代码

发布于2022-08-09 23:33     阅读(1068)     评论(0)     点赞(29)     收藏(3)


我有这行代码:

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,您可以使用函数和其他有趣的东西(或策略模式)。但真的只为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方法知道什么时候返回landor stad在内部,它将使用上述之一来实现,但调用者不需要关心。我不知道决定landor所需的逻辑stad,但这可能是我推荐的逻辑,它使用if语句在内部实现。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/473281/6fc6b816d9ae136a335c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

29 0
收藏该文
已收藏

评论内容:(最多支持255个字符)