2014-12-11 30 views
-1

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

+0

您需要展示更多代码。你究竟得到了什么错误? – Thilo 2014-12-11 01:20:24

+0

错误:()java:找不到符号。更多的代码在http://stackoverflow.com/questions/27413112/passing-and-using-class-in-a-method-in-java – Ava 2014-12-11 01:24:35

+0

什么是'var'的类型?那个班的定义是什么? – Dima 2014-12-11 01:31:14

回答

0

我想你应该使用接口而不是泛型,如果你想在各种类(A,X,Y,Z)(每个类都有相同的函数签名)上调用相同的'blah'函数。

你的其他选项(如果你不能修改A等)是使用反射。阅读更多关于此的https://docs.oracle.com/javase/tutorial/reflect/

0

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