我能否问一下使用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 .I ,则返回O 的表示形式。


阅读此内容后,我尝试执行以下操作:

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>).


也许我试图做一些没有意义的事情,但是我没有更多的想法了。

(adsbygoogle = window.adsbygoogle || []).push({});

最佳答案

(由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与参数化类型没有任何关系,而是与编写它的类有关。

解释:

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


不为空!好极了!

这就是我从您的问题中得到的,因此我希望这会有所帮助! (而且,我希望我没有犯任何错误-_-)

祝好运!

关于java - getOwnerType方法的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32167199/

(adsbygoogle = window.adsbygoogle || []).push({});
10-09 01:25