@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?

Другие вопросы по тегам