我有一个混合 groovy/java 环境和一个简单的管理器层次结构:
public abstract class HomeBean<T extends BaseEntity> {
private T instance;
public T getInstance() {
if (instance == null) {
if (id != null) {
instance = loadInstance();
} else {
instance = createInstance();
}
}
return instance;
}
protected void setInstance(T instance) {
this.instance = instance;
}
}
在 TaskManager.groovy 中:
@TypeChecked
class TaskManager extends HomeBean<Task> implements Serializable {
void doSomething() {
instance.compute()
}
}
我看到的问题是 groovy 编译器假定它instance
是 typeBaseEntity
并且只是忽略了TaskManager
.
这是设计使然,还是我可以以某种方式让编译器知道其他类型信息?
编辑添加:我已经验证了 groovy-2.1.7 仍然会发生这种情况,尽管我希望它会在GROOVY-5981中得到修复。
编辑添加:作为一种解决方法,我正在投射这样的实例:
@TypeChecked
class TaskManager extends HomeBean<Task> {
void doSomething() {
currentTask.compute()
}
Task getCurrentTask() { instance as Task }
}
但这是我想摆脱的不必要的重复。