@TypeChecked对泛型类型参数的失败

时间:2013-10-07 16:13:10

标签: generics groovy

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

但这是一件不必要的重复,我想摆脱它。

0 个答案:

没有答案