@CompileStatic: возможно ли автоматическое приведение типов?
Возможно ли, что приведенный ниже код может быть скомпилирован с @CompileStatic
?
import groovy.transform.CompileStatic
@CompileStatic
class CompileStaticTest {
List<Number> numbers = []
void addWithCase(something) {
switch (something) {
case Integer: numbers << something; break // compile error
case Float: numbers << something; break // compile error
}
}
void addWithInstanceof(something) {
if (something instanceof Integer) {
numbers << something // compile error
}
if (something instanceof Float) {
numbers << something // compile error
}
}
}
Использование:
test = new CompileStaticTest()
test.addWithCase(11)
test.addWithCase(12f)
test.addWithCase('13')
test.addWithInstanceof(21)
test.addWithInstanceof(22f)
test.addWithInstanceof('23')
println test.numbers
В настоящее время есть ошибки компиляции:
[Static type checking] - Cannot call <T> java.util.List <Number>#leftShift(T) with arguments [java.lang.Object]
Тип чего-либо известен switch-case
или же instanceof
так что приведение может быть сделано автоматически, нет? Возможно, я просто представляю слишком простой пример, и реализация запрошенной функциональности не подходит для более сложного кода.
1 ответ
Это звучит как ошибка, потому что разрешено следующее:
if (something instanceof Integer) {
something.intValue()
}
Может быть, заполнение JIRA?