无法通过泛型访问类方法

时间:2014-12-11 01:17:45

标签: java class generics parameter-passing deserialization

我将方法更改为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}}方法?

3 个答案:

答案 0 :(得分:0)

我认为你应该使用界面而不是泛型,如果你想打电话给同一个&#39; blah&#39;函数在各种类(A,X,Y,Z)上(每个类具有相同的函数签名)..

您的其他选项(如果您无法修改A,e.t.c)是使用反射。在https://docs.oracle.com/javase/tutorial/reflect/

中详细了解此信息

答案 1 :(得分:0)

答案 2 :(得分:0)

在运行时分配给var的行绝对不相关。编译调用唯一重要的是var的静态(编译时)类型。由于T无界限(Object除外),因此除Object提供的方法外,不支持任何方法。这两段代码都无法编译。