如何从父类和子类的相同方法返回泛型类型
Posted
技术标签:
【中文标题】如何从父类和子类的相同方法返回泛型类型【英文标题】:How to return Generic type from same method for parent and child classes 【发布时间】:2014-11-25 20:35:26 【问题描述】:这是我的场景 我有 3 节课。
class Animal
public getWeight() .....
public getHeight() .....
class Dog extends Animal
public getDogType() ...
class Cat extends Animal
public getCatType()....
还有一个不同的方法,它返回一个以 Object 作为参数的 Animal 类型
public Animal translate(CustomObject o)
... so many calculations here
这里 translate 方法返回 Animal 对象,但是我需要使用相同的方法来返回 Dog 和 Cat 类型,而不需要进行类型转换。我知道我必须在这里使用泛型,但是如何编辑 translate 方法以支持泛型,以便我可以将 Class 类型传递给它的参数,如果使用 Cat 参数调用它返回 Cat 对象,如果使用 Animal 参数和 Dog 调用它返回 Animal 对象如果使用 Dog 参数调用对象。
例如:- Cat newCat = translate(object, Cat.class); //should return cat object and not animal obj
而不是
Cat newCat = (Cat)translate(object, Cat.class)
谢谢。
【问题讨论】:
【参考方案1】:你需要一个自引用绑定:
class Animal<T extends Animal<T>>
public getWeight() .....
public getHeight() .....
public T translate(CustomObject o)
//... so many calculations here
class Dog extends Animal<Dog>
//
class Cat extends Animal<Cat>
//
您可以考虑将translate()
抽象化,允许子类处理它们自己的实现。
【讨论】:
感谢您的回答 np。仅供参考,其他答案允许您从Dog
对象返回 Cat
。【参考方案2】:
试试public <T extends Animal> translate(CustomObject o, Class<T> clazz)
。
【讨论】:
感谢您的回答以上是关于如何从父类和子类的相同方法返回泛型类型的主要内容,如果未能解决你的问题,请参考以下文章