一个通用的 class 让我有不同的 return 类型 (Java)

A generic class that lets me have different return types (Java)

今天,我一直在使用 java () 中的 generic/parametric 类型来锻炼我对多态性的理解,但从现在开始,我一直遇到一个问题,即我将拥有一个通用的 class 使用一个方法 return 是一个值,原因是因为我希望能够调用一个方法并且根据上下文能够有不同的 return 类型

class dummy <E>{
    E value;
    public E getValue(){
         return value;
    }
class dummy1 extends dummy<E>{
    int value;
    public int getValue(){
         return int;
    }
class dummy2 extends dummy<E>{
    boolean value;
    public boolean getValue(){
         return boolean;
    }

这可能吗?我不确定这是否是做这种事情的正确方法

您遇到的问题是在 Java 原语中,例如 intboolean,不能是通用参数。

您需要将它们换成等效的引用类型:IntegerBoolean

另外 E 的范围是 dummy class。您需要向 superclass.

提供类型参数
class Dummy<E> {
    private E value;
    public Dummy(E value) {
         this.value = value;
    }
    public E getValue() {
         return value;
    }
}
class Dummy1 extends Dummy<Integer> {
    public Dummy1(Integer value) {
         this.value = value;
    }
}
class Dummy2 extends Dummy<E> {
    public Dummy2(Boolean value) {
         this.value = value;
    }
}

或:

abstract class Dummy<E> {
    public abstract E getValue();
}
class ReferenceDummy<E> extends Dummy<E> {
    private final E value;
    public Dummy1(E value) {
         this.value = value;
    }
    @Override public E getValue() {
         return value;
    }
}
class Dummy1 extends Dummy<Integer> {
    private int value;
    public Dummy1(int value) {
         this.value = value;
    }
    @Override public Integer getValue() {
         return value;
    }
}
class Dummy2 extends Dummy<Boolean> {
    private boolean value;
    public Dummy1(boolean value) {
         this.value = value;
    }
    @Override public Boolean getValue() {
         return value;
    }
}

请注意,例如,boolean getValue() 出于某种原因无法覆盖 Boolean getValue()