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
、型チェックされた method 内で、型チェックされていないmethod の戻り値などを使用しますB
。B
この場合、 method の戻り値に関する十分な情報がないため、コンパイラがメソッドの型に一貫性があるかどうかを判断する方法がわかりませんA
。
一般的に型の安全性を失うことなく、コードのサブセットで型チェックを有効にするにはどうすればよいでしょうか?
編集
私は例を作ろうとします。古いクラスがある場合はどうなりますか
class Old {
public getFoo() {
return 1
}
}
次のように、型チェックされたコードから使用してみてください
@TypeChecked
class New {
int doubleFoo() {
return 2 * (new Old().foo)
}
}
コンパイラは何をすべきかわからないだけで、コンパイルに失敗すると思います(チェックするためにGroovy2をここにインストールしていません)。しかし、そうなると、Groovy2 より前に書かれたコードを使用することが問題になります。だから私はもっと洗練された何かが行われていると想像していますが、私にはわかりません。