如何在Java中使用泛型消除通配符返回类型?
下面是一段使用Javassist动态生成类的代码如何在Java中使用泛型消除通配符返回类型?,java,generics,javassist,Java,Generics,Javassist,下面是一段使用Javassist动态生成类的代码 public class ClassGenerator { // ... public Class<? extends Base> generateClass(MetaData md) { // Call javassist api and returns a generated on the fly class... } } 公共类生成器{ // ... 公共类将您的Generator
public class ClassGenerator {
// ...
public Class<? extends Base> generateClass(MetaData md) {
// Call javassist api and returns a generated on the fly class...
}
}
公共类生成器{
// ...
公共类将您的GeneratorClient
声明更改为:
public class GeneratorClient<T extends Base>
implements IClient<T>
{
private final Class<T> clazz;
// etc
代码:
final GeneratorClient<MyClass> = GeneratorClient.forClass(MyClass.class);
final GeneratorClient=GeneratorClient.forClass(MyClass.class);
Uhwell,生成返回值(clazz
)aClass+1@fge据我所知,这是他想要的!!!@fge我已经更新了我的问题,我的答案仍然有效。Class
是Base.Class
,它可以是别的。如果你想获取它的子类的Class对象,你必须执行ClassSee查看我的答案(在重新阅读了你的代码之后,我想我理解了你的目的)。但是,我不知道元数据是什么。当涉及Instanceate GeneratorClient时,类型类只在运行时知道,而不是在编译时知道。这是一个非常聪明的解决方法,尽管我仍然有一个通配符返回类型!嗯,你的意思是什么“虽然我仍然有一个通配符返回类型”?:)注意:Mockito对它的ArgumentCaptor
使用相同的东西。您可以使用final ArgumentCaptor captor=ArgumentCaptor.forClass(X.class);
(出于纯粹的习惯,final
是我的;我非常高兴)类生成器#generateClass保持不变。
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);