[英]Casting generic types in Java
我有以下自定义迭代器:
class PetIterator<T extends Pet> implements Iterator<T>
我有这门课:
class Dog extends Pet
但是Java编译器不允许进行这种PetIterator
( iterate
返回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.