有没有办法引用任何内部类?
我想指定一个与内部类兼容的返回类型,例如
Class<OuterClass.*> some_method();
我理解这种语法无效。有没有办法表达这个?
我知道我不能使用Class<? extends OuterClass>
之类的内容,因为内部类不会扩展外部类。
答案 0 :(得分:5)
嗯,你可以参考特定的内部类,至少:
<T extends OuterClass.InnerClass> Class<T> some_method()
除此之外,返回任何内部类的对象会获得什么?这与返回任何对象以及内部实例与外部实例具有特殊关系的事实相当。但是,您可能无法直接使用该特殊关系。
编辑:
正如其他人所指出的,InnerClass
可能是由其他内部类扩展的超级类。这将允许您返回任何扩展该类的类。
如果您使用的是接口,则不仅限于内部类,因为对于此限制,您需要非静态内部接口。但是,默认情况下,内部接口是静态的。
答案 1 :(得分:3)
我宁愿定义一个(内部)接口,让所有内部类实现它,然后:
Class<OuterClass.MyInterface> someMethod();
这比尝试引用任何内部类更安全。如果您需要另一个内部类用于其他用途,或者您决定提取课程的那一天,那么您就不会遇到任何问题。
答案 2 :(得分:0)
不,没有。正如您无法使用通配符引用包:
Class<com.example.*> some_method();
Class<com.example.?> some_method();
此类声明的用例非常有限,它只是不能进入JLS。请注意,您不能使用此类&#34;位置匹配类型&#34;也不属于泛型范围。例如。你不能声明:
void some_method(OuterClass.* argument);
void some_method(com.example.* argument);
答案 3 :(得分:0)
您可以定义标记界面并按内部类实现它。
<T implements CustomMarkerInterface> Class<T> some_method()
所以这适用于OuterClass
public class Outer {
public class Inner implements CustomMarkerInterface{
}
public class Inner1 implements CustomMarkerInterface{
}
public class Inner2 implements CustomMarkerInterface{
}
}
答案 4 :(得分:0)
Class<InnerClass>
。你在寻找特定的东西吗?
public class Client
{
interface InnerType
{
}
public class InnerClass implements InnerType
{
}
public Class<? extends Client.InnerType> test()
{
return InnerClass.class;
}
}