Java,子类返回泛型的泛型

标签 java generics


有谁能告诉我如何在函数“getDirectHair()”中编写返回代码吗?
我想创建一个类似于 Human 类中的快捷方式的方法,直接返回 Hair 类的良好类型(下面名为“h.getDirectHair()”),而不是使用“h.getPerson().getHair()”。
我想使用 Human 类中声明的 Person 的类型

package test;
public class Test {
    public static void main(String[] args) {
        Human<Bob> h = new Human<Bob>();
        Blond blond = h.getPerson().getHair(); // no cast needed, because Human<Bob> is blond
        //how to do if I want to use directly this :
        blond = (!!!) h.getDirectHair();  //need cast !! Blond or Brown ?
    }
}
class Human<T extends Person<?>>{
    private T person = null;
    public T getPerson() {
        return person;
    }
    public /* <?> */ Object getDirectHair(){
        // => I want to return the type <?> of Person<?> 
        // instead of Object, how to ??
        return person.getHair();
    }
}
class Person<T extends Hair> {
    T hair;
    public Person(T hairr) {
        hair = hairr;
    }
    public T getHair() {
        return hair;
    }
}
class Bob extends Person<Blond> {
    public Bob(Blond bean) {
        super(bean);
    }
    public Blond getHair() {
        return super.getHair();
    }
}
class Barack extends Person<Brown> {
    public Barack(Brown bean) {
        super(bean);
    }
    public Brown getHair() {
        return super.getHair();
    }
}
class Hair {
}
class Blond extends Hair {
}
class Brown extends Hair {
}


非常感谢和最诚挚的问候,
大卫。

最佳答案

解决该问题的方法如下:

public class Test {
    public static void main(String[] args) {
        Human<Blond, Bob> h = new Human<Blond, Bob>();
        Blond blond = h.getPerson().getHair(); 
        blond = h.getDirectHair();
    }
}

class Human<H extends Hair, T extends Person<H>>{
    private T person = null;
    public T getPerson() {
        return person;
    }
    public H getDirectHair(){
        return person.getHair();
    }
}

关于Java,子类返回泛型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17697855/

相关文章:

java - 与第三方类(class)时的mockito

c# - 通用类型属性的任何替代解决方案?

c# - 从字符串转换为 <T>

Java - 具有用于 3 种相似类型的有界类型的泛型方法 : String, StringBuilder、StringBuffer

java - View 类型的可空接收器上是否允许错误 :error: only safe (? .) 或非空断言 (!!.) 调用?

Java Comparator.comparing 不比较?

java - 如何在Java的2个定时器任务中可靠地创建一个锁(所以当其他任务运行时会等待)

java - 未知的崩溃报告安卓

c# - 如何将数据绑定(bind)到与派生 List<T> 的类中的列表项无关的属性

generics - 简化具有重复关联类型限制的 where 子句