问题标签 [diamond-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 无法自动推断泛型参数
我定义了这个方法:
当我写:
一切都很好,但如果我写这个:
Java 无法自动推断 Integer 类型。我收到以下错误:
为什么?是什么阻止了 Java 做出正确的推理?
我的Java版本是:
perl - 我怎么知道钻石操作员是否移动到下一个文件?
我在文件中有以下代码perl_script.pl
:
我用超过 1 个文件调用脚本,例如
有没有办法知道是否$line
开始读取file2.txt
等?
java - 在最近的 Java 版本(8+)中可以省略菱形运算符吗?
在 Java 7 中,我们可以使用菱形运算符:
现在我在最近的一些代码中看到人们放弃了钻石运算符:
这是在最近的 Java 版本(Java 8+)中添加的新功能以删除菱形运算符吗?或者他们只是依赖于原始的旧 ArrayList 类型(出于向后兼容性的原因恰好可以工作,应该避免)?
java - 术语“钻石算子”是否正确?
钻石运算符一词非常流行:在 Google 中搜索“钻石运算符”java会产生 78.300 个结果,而 Stack Overflow 有自己的钻石运算符标签。
Java 语言规范,Java SE 8 版,第3.12节运算符虽然没有<>
列为运算符。第15.9 节类实例创建表达式将其称为菱形形式。本文件未提及钻石操作员。
术语钻石算子正确吗?我不明白您为什么将其称为运算符 - 毕竟它只是一个空类型参数列表?使用这个词有意义吗?
java - 什么时候是钻石算子,什么时候不是?
考虑以下两行代码:
对我来说,它们看起来很相似。但是,Java 编译器 (1.8) 拒绝第二行并显示消息“无法推断 SimpleFileVisitor<> 的类型参数”。
谁能解释一下,有什么问题吗?
java - 在 Java 泛型中使用 <>
为什么 Java 接受下面的代码行,而 <> 只出现在右边?<> 标志没有这样的(泛型功能)目的吗?
到目前为止,我只了解右侧 <> 的用法,如下例所示。这里Java推断左边的类型,所以右边不需要再指定,直接使用<>即可。
java - 当为构造函数提供类型参数时 - 不能使用菱形运算符并且必须提供类型参数?
考虑 JLS 中的以下条款(§15.9)
如果类实例创建表达式向构造函数提供类型参数但使用菱形形式作为类的类型参数,则这是一个编译时错误。
不允许这样做的原因如下
引入此规则是因为泛型类的类型参数的推断可能会影响对泛型构造函数的类型参数的约束。
不太清楚为什么会这样说 - 在泛型类和泛型构造函数的情况下考虑以下类型参数的典型用法:
在这里,我们有以下内容:
- 仅构造函数的类型参数是 K 而类是 {T,R}
- 所有这些类型彼此不同——当使用菱形运算符时——类类型不能与为构造函数的类型参数指定的类型发生冲突。
那么上述“在提供构造函数的类型参数时不允许使用菱形运算符”的原因如何有效?. 我在这里错过了什么吗?