Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用泛型消除通配符返回类型?_Java_Generics_Javassist - Fatal编程技术网

如何在Java中使用泛型消除通配符返回类型?

如何在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

下面是一段使用Javassist动态生成类的代码

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
)a
Class+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);