gpt4 book ai didi

java - "Unexpected token"使用下界通配符 (Java)

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:01 25 4
gpt4 key购买 nike

我有一些类似的东西:

interface Foo<T> {
//... lines [0,45]...

/*line 46*/ <R, X super T&R> List<X> weave(R value);
//...
}

但是 IntelliJ 正在报告:

  1. 错误:(46, 18) java: > 预期
  2. 错误:(46, 19) java: 类型的非法开始
  3. 错误:(46, 26) java: '(' 预期
  4. 错误:(46, 28) java:<标识符> 预期
  5. 错误:(46, 29) java:应为“l”
  6. 错误:(46, 43) java:<标识符> 预期

有什么问题?我不允许将名称绑定(bind)到下限吗?还是只允许在上限中使用 R&X 表达式?

将其更改为

interface Foo<T> {
//... lines [0,45]...

/*line 46*/ <R> List<? super T&R> weave(R value);
//...
}

产量

  1. 错误 (46, 31) java: > 预期
  2. 错误 (46, 32) java: '(' 预期
  3. Error(46, 33) java: 类型的非法开始

最佳答案

根据我对规范的阅读,super 只能与通配符一起使用,不能捕获到类型变量中;见JLS 4.5.1 .同样,&只在类型变量中有效,类型arguments无效,类型变量不能使用super .

经过思考,我的解释是:类型变量的原因是为了消除显式转换以提高类型安全性。当您将类型参数声明为 super Foo 时,您是说该参数可以是 Foo任何父类(super class)。这意味着它可以是 Object 之前的任何内容,包括 Object,因此您没有安全的方法来假设关于其类型满足该绑定(bind)的对象的任何内容,因此命名类型中不包含任何信息多变的;您只需对它进行通配符,然后就可以调用 hashCode()toString(),但没有类型特定的内容。

关于java - "Unexpected token"使用下界通配符 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18157318/

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