我看到从 Groovy 2.0 开始,可以TypeChecked
向类或方法添加注释以触发可选的静态检查。
我必须承认,我对这样的事情如何运作感到困惑。文章给出了简单的例子,例如
@TypeChecked
Date test() {
// compilation error:
// cannot assign value of Date
// to variable of type int
int object = new Date()
String[] letters = ['a', 'b', 'c']
// compilation error:
// cannot assign value of type String
// to variable of type Date
Date aDateVariable = letters[0]
// compilation error:
// cannot return value of type String
// on method returning type Date
return "today"
}
在这种情况下,很明显某些检查会失败。但在一般情况下,会A
在类型检查的方法内部使用方法的返回值,即未类型检查的返回值B
。在这种情况下,我看不到编译器如何确定方法B
类型是否一致,因为它没有足够的关于方法返回值的信息A
。
一般而言,如何在不丢失类型安全的情况下对代码子集启用类型检查?
编辑
我试着举个例子。如果我有一个旧班级怎么办
class Old {
public getFoo() {
return 1
}
}
并尝试从经过类型检查的代码中使用它,例如
@TypeChecked
class New {
int doubleFoo() {
return 2 * (new Old().foo)
}
}
编译器只是不知道该怎么做,我猜它会编译失败(我这里没有安装 Groovy2 来检查)。但如果是这种情况,那么使用任何在 Groovy2 之前编写的代码都会成为问题。所以我想象一些更复杂的事情已经完成,但我不确定是什么。