getOwnerType方法的示例



我是否可以询问使用getOwnerType()方法的任何示例,该方法将返回任何类型对象,但不是值"null" ?

这是一个使用getOwnerType()方法的特定示例,我在Google中找到:

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对象,表示此类型所属的类型。例如,如果此类型为0 .I,返回0 &lt的表示形式;T> .

看完这篇文章后,我试着做了这样的事情:

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

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

(由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 {
    }
}

如果你在class3上运行getOwnerType,它将返回class1。

所以,本质上,重写你的第一个例子:
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

不空!耶!

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

祝你好运!

相关内容

  • 没有找到相关文章

最新更新