我有一个混合的groovy / java环境,它有一个简单的Manager层次结构:
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
的类型为BaseEntity
,而忽略了TaskManager
的限制。
这是设计还是可以让编译器知道其他类型信息?
编辑补充:我已经确认这仍然发生在groovy-2.1.7中,尽管我希望它会在GROOVY-5981中修复。
编辑添加:作为解决方法,我按照以下方式投射实例:
@TypeChecked
class TaskManager extends HomeBean<Task> {
void doSomething() {
currentTask.compute()
}
Task getCurrentTask() { instance as Task }
}
但这是一件不必要的重复,我想摆脱它。