代码之家  ›  专栏  ›  技术社区  ›  Max

如何铸造类<?>到班级?

  •  2
  • Max  · 技术社区  · 7 年前

    我和 Class<?>

    private Class<?> myType = ...;
    private String jsonRepresentationOfObject = ....;
    ObjectMapper mapper = new ObjectMapper();
    
    public <T> T get() {
       return mapper.readValue(jsonRepresentationOfObject, myType);
    }
    

    有没有可能投 myType T ? 或者这是不可能的,因为类型擦除?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Adam Arold    7 年前

    如果你绝对确信 readValue 将为类型 T 您可以这样做:

    public <T> T get() {
       return (T)mapper.readValue(jsonRepresentationOfObject, myType);
    }
    

    @SuppressWarnings 但对于未经检查的演员。

    在其他语言中(如Kotlin,它可以与Java进行互操作),您可以使用 reified generics 但由于类型擦除,它在Java中不存在。

    如果结果 读取值 T ClassCastException

        2
  •  -1
  •   Don Hosek    7 年前

    这是不可能的,多亏了类型擦除。这就是为什么Java中的一些库函数让您传入一个类的实例,该类除了执行 .getClass() (T returnType) readValue 呼叫,我过去 returnType.getClass() .