我将方法更改为generic方法。现在发生的事情是我正在对methodB
中的类进行反序列化并访问我不能再做的方法。
<T> void methodB(Class<T> clazz) {
T var;
HashMap<String, T> hash = new HashMap<>();
}
void methodA () {
methodB(classA.class);
}
最初在methodB
里面没有任何泛型,
var = mapper.convertValue(iter.next(), ClassA.class);
var.blah() //works fine
使用泛型后,
var = mapper.convertValue(iter.next(), clazz);
var.blah() //cannot resolve the method.
如何访问blah()
的{{1}}方法?
答案 0 :(得分:0)
我认为你应该使用界面而不是泛型,如果你想打电话给同一个&#39; blah&#39;函数在各种类(A,X,Y,Z)上(每个类具有相同的函数签名)..
您的其他选项(如果您无法修改A,e.t.c)是使用反射。在https://docs.oracle.com/javase/tutorial/reflect/
中详细了解此信息答案 1 :(得分:0)
感谢Passing a class with type parameter as type parameter for generic method in Java。使用TypeToken
解决了问题答案 2 :(得分:0)
在运行时分配给var
的行绝对不相关。编译调用唯一重要的是var
的静态(编译时)类型。由于T
无界限(Object
除外),因此除Object
提供的方法外,不支持任何方法。这两段代码都无法编译。