繁体   English   中英

用Java转换通用类型

[英]Casting generic types in Java

我有以下自定义迭代器:

class PetIterator<T extends Pet> implements Iterator<T>

我有这门课:

class Dog extends Pet

但是Java编译器不允许进行这种PetIteratoriterate返回PetIterator ):

Iterator<Dog> dogs = (Iterator<Dog>)petstore.iterate (“dogs”);

除了写之外,我如何获取我的金毛寻回犬:

PetIterator dogs = petstore.iterate (“dogs”);
...
Dog dog = (Dog)dogs.next();

您可以将iterate(String)方法重写为:

class PetStore {
  <T extends Pet> PetIterator<T> iterate(Class<T> clazz);
}

然后,您可以安全地使用该方法

PetIterator<Dog> dogs = petstore.iterate (Dog.class);
// ...
Dog dog = dogs.next();

因为PetIterator<T extends Pet>不是PetIterator<Dog> 它可以是任何Pet ,然后您的iterator.next()将无法转换为Dog

您为什么不简单地使用class PetIterator implements Iterator<T> (这与petstore对象中的T相同,我想这也是通用的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM