【问题标题】:How to pass class object as a variable in Java如何在Java中将类对象作为变量传递
【发布时间】:2021-09-01 15:06:00
【问题描述】:

我在下面有一个函数,它接受一个字符串并使用 java 中的 Jackson Api 将其转换为 JSON 对象。

public JobConfig fromJson(String config)  {
        JobConfig lib = null;
        try {
            lib = mapper.readValue(config, JobConfig.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return lib;
    }

JobConfig.class 是我的 JSON 结构的 JAVA Pojo。

我像下面这样调用这个函数-

JobConfig jobConfig = utils.fromJson(config);

问题是我必须为另一个 JSON 编写另一个函数,所以我希望它足够动态,所以当我调用这个函数时,我还可以发送 JobConfig.class 类,它应该会相应地返回。

在 scala 中我会做这样的事情 -

def fromJson[T : Manifest](s: String): T = Serialization.read[T](s)

不确定如何在 Java 中执行此操作。接受新的学习。

【问题讨论】:

  • 你的意思是像<T> T fromJson(String json, Class<T> type) 这样可以像JobConfig config = utils.fromJson(config, JobConfig.class) 这样调用吗?

标签: java scala reflect


【解决方案1】:

试试这个,使用 Java 泛型:

  public <T> T fromJson(String config, Class<T> clazz) {
    T lib = null;
    try {
      lib = mapper.readValue(config, clazz);
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
    return lib;
  }

呼叫:

JobConfig config = fromJson("json here", JobConfig.class)

【讨论】:

  • 谢谢!这也有效,我了解了 Java 泛型
【解决方案2】:

您可以像使用 Scala 泛型一样使用 Java Generic。它允许您使用单个方法声明、一组相关方法。

public T fromJson(String config, Class clazz)

然后你可以调用这个函数,你的第二个参数是.Class Object

【讨论】:

    【解决方案3】:

    在java中你也可以使用泛型。

    你的代码会是这样的:

    public class Main<T> {
        public T fromJson(String config)  {
            T lib = null;
            try {
                lib = mapper.readValue(config, Class<T>);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return lib;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多