java - 用于使用的 Java 泛型父类中未定义的方法
问题描述
我有一个方法如下
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());
}
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;
}
}
问题是 printStatus 中的 result.getstatus() 给出了编译错误。在不重构大量代码的情况下,在 printStatus 方法中解决此问题的最简单方法是什么?
解决方案
T
将方法泛型化为whenT
只出现在一个地方是没有意义的。相反,您可以只写:
private void printStatus(GenericObject result) { ... }
类型变量主要只在出现在多个地方时才增加价值,例如:
<T> T choose(boolean condition, T ifTrue, T ifFalse) {
return condition ? ifTrue : ifFalse;
}
或者
<T> List<T> toList(Set<T> set) { ... }
因为它们表达了多个参数之间或参数和返回之间的实际约束。
推荐阅读
- java - 按下时我的 JButton 什么也没做?
- scala - 如何从子列表中提取元素?
- python - 提供的绑定数量不正确。当前语句使用 1,提供了 5 个
- angular - 仅当表单有效时,角度表单才获取字段值
- java - 将我的自定义外部登录与 spring boot oauth2(授权授予类型)一起使用?
- javascript - 尝试关闭并打开命令 quick.db
- twilio - Twilio - 如果我们有用户凭据,如何将用户直接导航到流编辑页面
- c# - 带有数字的希伯来字符串 concat 导致顺序错误
- php - 如何使用php rand fucuction生成2组匹配的数据
- python - 如何使用单个表单更新多个模型