【问题标题】:Java Dynamic Function CallJava 动态函数调用
【发布时间】:2015-08-18 19:39:24
【问题描述】:

我有课

class JsonMap extends HashMap<String, Object> {}

我这样初始化了一个对象

JsonMap jm = new JsonMap();

我是这样插入数据的

jm.put("id", 4);
jm.put("message", "Hello");

但我想做一些简单的事情,效果相同。

jm.setId(4);
jm.setMessage("Hello");

这是否可能无需在JsonMap 类中编写方法setIdsetMessage

函数名称是动态的:第一部分始终是“设置”,第二部分是动态值。这将作为HashMap 中的关键。

如果可能的话,谁能告诉我如何做到这一点?

【问题讨论】:

  • 我不认为在 java 中可以制作像 dynamic methods 或类似 javascript prototype 的东西。
  • 我的问题是你为什么要这样做? jm.put("key","value")写的已经很简单了
  • 你也可以稍微搞砸并做出这样的事情:pastebin.com/MtggQ9Ec 但对我来说它看起来比标准的jm.put("key","val"); 更糟糕

标签: java reflection dynamic-function


【解决方案1】:

你正在寻找的东西是不可能的,因为语言不支持这种功能,所以至少你可以停止寻找内置的语言功能。您可能想要查看的替代选项:

  • 专业的 JSON 序列化器(如 Jackson
  • JSONtoPOJO 转换器(其中许多都可用online

【讨论】:

    【解决方案2】:

    Java 是一种强类型语言,而不是脚本语言,所以,不写方法setIdsetMessage 是不可能的JsonMap 类。 p>

    【讨论】:

      【解决方案3】:

      您需要编写方法来为您执行此操作

      public void setId(int id) {
          jm.put("id", id);
      }
      
      public void setMessage(String message) {
          jm.put("message", message);
      }
      

      【讨论】:

      • 整个实现将取决于大小写,他需要为他想要包含到 JSON 对象的每个键编写方法
      • @syraz37 Java 是一种强类型语言,而不是脚本语言。 jm.setId(4) 要求在类中定义setId(int) 方法。
      • @nLee 在他的例子中,setId 方法应该采用 int
      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2018-02-02
      相关资源
      最近更新 更多