Java内部类的类引用

Java内部类的类引用,java,generics,inner-classes,Java,Generics,Inner Classes,有没有一种方法可以引用任何内部类 我想指定一个与内部类兼容的返回类型,例如 Class<OuterClass.*> some_method(); Class some_method(); 我理解这个语法是无效的。有什么方法可以表达这一点吗 我知道我不能使用像Class这样的东西,您可以引用特定的内部类,至少: <T extends OuterClass.InnerClass> Class<T> some_method() Class some_metho

有没有一种方法可以引用任何内部类

我想指定一个与内部类兼容的返回类型,例如

Class<OuterClass.*> some_method();
Class some_method();
我理解这个语法是无效的。有什么方法可以表达这一点吗


我知道我不能使用像
Class这样的东西,您可以引用特定的内部类,至少:

<T extends OuterClass.InnerClass> Class<T> some_method()
Class some_method()
除此之外,返回任何内部类的对象会有什么好处?这相当于返回任何对象加上内部实例与外部实例具有特殊关系这一事实。然而,无论如何,您可能无法直接使用这种特殊关系

编辑:

正如其他人指出的,
内部类
可能是由其他内部类扩展的超类。这将允许您返回扩展该类的任何类


如果您要使用接口,就不会仅限于内部类,因为对于这种限制,您需要非静态的内部接口。但是,默认情况下,内部接口是静态的。

不,没有。正如不能使用通配符引用包一样:

Class<com.example.*> some_method();
Class<com.example.?> some_method();
我宁愿定义一个(内部)接口,让所有内部类实现它,然后:

Class<OuterClass.MyInterface> someMethod();
Class someMethod();

这将比试图引用任何内部类更安全。当您需要另一个内部类用于另一个用途时,或者当您决定提取一个类时,您不会有任何问题。

您可以定义标记接口并通过内部类实现它

<T implements CustomMarkerInterface> Class<T> some_method()
java中允许使用类
。你在找什么特别的东西吗

public class Client
{
interface InnerType
{
}
public class InnerClass implements InnerType
{
}
public Class<? extends Client.InnerType> test()
{
    return InnerClass.class;
}

}
公共类客户端
{
接口内部类型
{
}
公共类InnerClass实现InnerType
{
}

public类为什么要这样做?它不会添加任何类型安全性。是的,你可以让一个内部类扩展一个外部类,不是吗?类是内部的只是它定义在哪里的问题。你还可以问一种方法将类型绑定到包中。我的问题是,为什么eclipse要求导入内部类?
class OuterClass{公共静态类内部类{}
,解决方法是我认为静态内部类是可用的only@EugenMartynov不,您也可以使用非静态的内部类。但是
内部类
不扩展
内部类
,这将不适用于
外部类
的其他内部类,我认为,即OP想要的
意味着任何内部类
OuterClass
@Nandkumar的ss是正确的,但是
InnerClass
也可以是一个接口。问题是:如果不实现特殊接口或扩展另一个内部类,这是不可能的。正如我理解的OP一样,问题是是否可以在不使用spe的情况下声明任何内部类类本身上的标记。很遗憾,不支持内部接口。它必须是内部基类。@Thomas“不支持内部接口”是什么意思?它们是常用的,并且在定义回调时非常有用。@你说得对。我自己的测试示例愚弄了我,内部类的内部接口不受支持。:)-此外,内部接口也可以由其他类实现,从而消除了它们作为内部接口的需要。
public class Outer {

    public class Inner implements CustomMarkerInterface{

    }

    public class Inner1 implements CustomMarkerInterface{

    }

    public class Inner2 implements CustomMarkerInterface{

    }

}
public class Client
{
interface InnerType
{
}
public class InnerClass implements InnerType
{
}
public Class<? extends Client.InnerType> test()
{
    return InnerClass.class;
}

}