一个通用的 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 原语中,例如 int
和 boolean
,不能是通用参数。
您需要将它们换成等效的引用类型:Integer
和 Boolean
。
另外 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()
。
今天,我一直在使用 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 原语中,例如 int
和 boolean
,不能是通用参数。
您需要将它们换成等效的引用类型:Integer
和 Boolean
。
另外 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()
。