Saa*_*aad 0 java generics inheritance extends
我有一个方法如下
private <T extends GenericObject>void printStatus(final T result) {
System.out.println("Status", result.getStatus());
System.out.println("GenericStatus", result.getGenericStatus());
System.out.println("GenericMessage", result.getGenericMessage());
}
Run Code Online (Sandbox Code Playgroud)
getGenericStatus 和 getGenericMessage 方法在 genericObject 父类中定义。但是,getStatus 方法是在扩展 GenericObject 的子类中定义的,getStatus 的返回类型是一个枚举,它为每个子类定义不同。如
public class A extends GenericObject {
/** Enum Astatus. */
private AStatus status;
AStatus getStatus() {
return status;
}
}
public class B extends GenericObject {
/** Enum Bstatus. */
private BStatus status;
BStatus getStatus() {
return status;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 printStatus 中的 result.getstatus() 给出了编译错误。在不重构大量代码的情况下,在 printStatus 方法中解决此问题的最简单方法是什么?
T当T仅出现在一处时,将方法设为泛型是没有意义的。相反,你可以只写:
private void printStatus(GenericObject result) { ... }
Run Code Online (Sandbox Code Playgroud)
类型变量主要是出现在多处时才加值,例如:
<T> T choose(boolean condition, T ifTrue, T ifFalse) {
return condition ? ifTrue : ifFalse;
}
Run Code Online (Sandbox Code Playgroud)
或者
<T> List<T> toList(Set<T> set) { ... }
Run Code Online (Sandbox Code Playgroud)
因为它们表达了多个参数之间或参数和返回之间的实际约束。