gpt4 book ai didi

Groovy - 使用泛型进行类型检查不起作用

转载 作者:行者123 更新时间:2023-12-02 09:59:12 26 4
gpt4 key购买 nike

这是 this SO question 的后续内容。我导入Groovy脚本来自 GroovyShell到我的应用程序并设置 TypeChecked转型。但是,当与具有泛型类型的类配对时,静态类型检查不起作用。方式如下Groovy脚本引发编译时错误对我来说并不明显:

Integer x = (new Test<Integer>(5)).value // works as expected
Integer y = (new Test<Object>(new Object())).value // throws a COMPILE error as expected
Integer z = (new Test(new Object())).value // throws a RUNTIME exception

class Test<T> {
T value

public Test(T value){
this.value = value
}
}

最后一个赋值 ( Integer z = ... ) 不会抛出编译时错误,而是在运行时失败并显示 GroovyCastException 。有谁知道这种行为或者有一些指向文档相关部分的指针?到目前为止,我还没有发现任何东西。此外,我的理解是Test<Object>Test (没有泛型参数)应该被平等对待?

更新

我正在使用Groovy版本2.4.3并在GroovyConsole AppSpot准备了在线脚本显示静态类型检查的不一致。

最佳答案

我认为这是一个错误。我尝试了一个使用原始和通用 ArrayList 的不同示例。我也有同样的行为。

import groovy.transform.TypeChecked

@TypeChecked
class Test {

static method() {
ArrayList<Integer> integerArrayList = new ArrayList<>();
ArrayList rawArrayList = new ArrayList();
ArrayList<Object> objectArrayList = new ArrayList<>();

integerArrayList << 1;
rawArrayList << new Object();
objectArrayList << new Object();

Integer x = integerArrayList.get(0); // Case 1: works as expected
Integer y = rawArrayList.get(0); // Case 2: doesn't throw a compile error but should
Integer z = objectArrayList.get(0); // Case 3: throws a compile error as expected
}
}

我提交了错误报告。请参阅TypeChecked Groovy does not throw illegal assignment error at compile time when using raw generic type 。让我们看看结果如何。

关于Groovy - 使用泛型进行类型检查不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com