java 无法通过泛型访问类方法

pn9klfpd  于 2023-10-14  发布在  Java
关注(0)|答案(3)|浏览(141)

我把方法改成了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.

如何访问classAblah()方法?

xcitsw88

xcitsw881#

在运行时为var赋值的那一行是绝对无关紧要的。对于编译调用来说,唯一重要的是var的静态(编译时)类型。由于T是无界的(除了Object),因此除了Object提供的方法之外,还不知道它是否支持任何方法。这两段代码都应该无法编译。

i86rm4rw

i86rm4rw2#

我认为你应该使用接口而不是泛型,如果你想在各种类(A,X,Y,Z)上调用相同的'blah'函数(每个类都有相同的函数签名)。
你的另一个选择(如果你不能修改A,e. t. c)是使用反射。在https://docs.oracle.com/javase/tutorial/reflect/中阅读更多信息

相关问题