我可以询问任何使用getOwnerType()方法的示例,其中此方法将返回任何Type对象,但不返回值" null" ?
这是我在Google中找到的使用getOwnerType()方法的某个example:
public class Main {
public static void main(String args[]) throws Exception {
Type type = StringList.class.getGenericSuperclass();
System.out.println(type);
ParameterizedType pt = (ParameterizedType) type;
Type ownerType = pt.getOwnerType();
System.out.println(ownerType);
}
}
class StringList extends ArrayList<String> {
}
这是一个结果:
java.util.ArrayList<java.lang.String>
null
一切都很好,因为pt
对象的值是顶级类型,返回null。
现在,可以说我不理解这些文件的话:
返回一个Type对象,表示此类型所属的类型。例如,如果该类型是O&lt; T&gt; .I&lt; S&gt;,返回O&lt; T&gt;。
读完这篇文章后,我试着这样做:
public class Main {
public static void main(String args[]) throws Exception {
... // a body of the main method is unchanged
}
}
class StringList extends ClassA<String>.ClassB<String> { // line No. 17
}
public class ClassA<T> {
public class ClassB<T> {
}
}
但是,它只会产生这样的错误(第17行):
No enclosing instance of type r61<T> is accessible to invoke the super constructor. Must define a constructor and explicitly qualify its super constructor invocation with an instance of r61<T> (e.g. x.super() where x is an instance of r61<T>).
也许我尝试做一些没有意义的事情,但我没有更多的想法..
答案 0 :(得分:0)
(由http://docs.oracle.com/javase/tutorial/java/generics/types.html提供)
参数化类型可以在这样的类中找到:
public class ClassA<K,V> {
// Stuff
}
然后,在主要课程中:
public static void main(String[] args) {
ClassA<String,List<String>> test = new ClassA<>("", new ArrayList<String>());
}
在使用另一个需要类型的类初始化ClassA时,会找到参数化类型。在这种情况下,List<String>
是参数化类型。
但是,在我自己的测试中,getOwnerType与paramaterized类型没有任何关系,而是与编写它的类有关。
解释:
public class ClassOne {
class ClassTwo {
}
class ClassThree extends ClassTwo {
}
}
如果在ClassThree上运行getOwnerType,它将返回ClassOne。
所以,实质上,重写你的第一个例子:
public class Main {
public static void main(String args[]) throws Exception {
Type type = StringList.class.getGenericSuperclass();
System.out.println(type);
ParameterizedType pt = (ParameterizedType) type;
Type ownerType = pt.getOwnerType();
System.out.println(ownerType);
}
class Dummy<T> {
}
class StringList extends Dummy<ArrayList<String>> {
}
}
你的输出:
Main.Main$Dummy<java.util.ArrayList<java.lang.String>>
class Main
不是空的!耶!
这是我从你的问题中得到的,所以我希望这有帮助! (并且,我希望我没有犯任何错误-_-)
祝你好运!