这是一个使用Javassist动态生成类的代码。
public class ClassGenerator {
// ...
public Class<? extends Base> generateClass(MetaData md) {
// Call javassist api and returns a generated on the fly class...
}
}
稍后在代码中,有
public class GeneratorClient implements IClient<Base> {
private Class<Base> clazz;
public void init() {
MetaData myMd = ...;
clazz = generator.generateClass(myMd);
// ...
}
public Base getClazz() {
return clazz;
}
}
public interface IClient<T extends Base> {
T getClazz();
}
显然,编译器会在这里引发错误。施放会引发警告(“Uncheked cast ...”) ...
禁止警告不是一种选择。
我也不能这样写:public class GeneratorClient implements IClient<? extends Base>
。
如何更改ClassGenerator#generateClass
的返回类型?
JDK 6
答案 0 :(得分:3)
将您的GeneratorClient
声明更改为:
public class GeneratorClient<T extends Base>
implements IClient<T>
{
private final Class<T> clazz;
// etc
这应该这样做。
编辑由于您只在运行时知道该类,因此请添加静态工厂方法来构建GeneratorClient
:
public static <T extends Base> GeneratorClient<T> forClass(final Class<T>)
{
return new GeneratorClient<T>(whatever, args, are, needed, if, any);
}
在代码中:
final GeneratorClient<MyClass> = GeneratorClient.forClass(MyClass.class);