1

我有一个混合 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 }
}

但这是我想摆脱的不必要的重复。

4

0 回答 0