@CompileStatic:自动类型转换可能吗?

时间:2014-09-17 17:33:41

标签: groovy switch-statement type-inference instanceof compile-static

是否可以使用@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-caseinstanceof知道,因此演员阵容可以自动完成,不是吗?也许我只是提出一个太简单的例子,实现所请求的功能并不适合更复杂的代码。

1 个答案:

答案 0 :(得分:0)

这听起来像个错误,因为允许以下内容:

if (something instanceof Integer) {
    something.intValue()
}

也许正在填写JIRA