问题标签 [raw-types]

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.

0 投票
4 回答
4683 浏览

java - 使用原始类型参数覆盖方法时可以避免未经检查的警告吗?

我正在扩展一个库中定义的类,我无法更改:

如果我正在定义一个扩展 Parent 的类 'Child' 并且我使用 Java 6 和泛型,那么在不收到未经检查的警告的情况下覆盖 init 方法的最佳方法是什么?

如果我添加泛型参数,我会得到:

无论我使用特定类型、有界通配符还是无界通配符,都会出现此错误。是否有正确或惯用的方法来覆盖非泛型方法而不发出警告,并且不使用 @SuppressWarnings("unchecked")?

0 投票
4 回答
7353 浏览

java - 用 Class 替换 Class以避免警告是一种好习惯吗?

在我的代码中的很多地方,我有这样的东西:

导致警告

类是原始类型。对泛型 Class 的引用应该被参数化。

但是,如果我更换

Class

Class<? extends Object>

警告消失。

这种简单的做法可以吗,还是以后会造成麻烦?

0 投票
15 回答
293058 浏览

java - 什么是原始类型,为什么我们不应该使用它?

问题:

  • Java 中的原始类型是什么,为什么我经常听说它们不应该在新代码中使用?
  • 如果我们不能使用原始类型,还有什么替代方案,它有什么更好的选择?
0 投票
3 回答
1674 浏览

generics - Scala class cant override compare method from Java Interface which extends java.util.comparator

I'm currently working on a port of a jEdit plugin to write all code in Scala. However Im forced at a certain point to implement my own Comparator.

My simplified code is as follows:

The MiscUtilities.Compare has the following signature when looking from IntelliJ

However when im trying to compile my class I get a error saying:

error: class compare needs to be abstract, since method compare in trait Comparator of type (x$1: T,x$2: T)Int is not defined class compare extends MiscUtilities.Compare {

I have also tried with Any and java.lang.Object as types, but no luck so far.

Help is very much appreciated:)

Regards Stefan

0 投票
2 回答
171 浏览

java - 在 Java 中使用原始类型有什么安全隐患?

我目前正在审查大型 Java EE 应用程序中各种警告的安全含义。由于大部分代码都有几年的历史,它包含了原始集合类型的许多用途:

而不是参数化的集合类型:

我能想到的唯一安全隐患是原始类型不能在编译时进行静态类型检查,并且可能会导致运行时错误,例如ClassCastException,根据代码中发生这种情况的位置,可能会导致拒绝服务.

使用我没有想到的原始类型还有其他含义吗?

0 投票
2 回答
53084 浏览

java - Java 6:不支持的 @SuppressWarnings("rawtypes") 警告

我搬到了一台装有最新 Sun 的 Java 编译器的新机器上,并注意到现有 Java 6 代码中的一些警告。Eclipse IDE 建议我用:

例如:

当我回到使用旧编译器(JDK 1.6.0_20)的机器时,我注意到这个旧编译器现在警告“原始类型”警告的抑制,声称这种抑制不受支持并建议用 @SuppressWarnings 替换它(“未选中”)。此外,在某些地方,默认情况下,最新的编译器让我同时放置“未检查”和“原始类型”——用旧编译器编译该代码会重现相同的警告。

如何在两者之间强制执行向后/向前兼容性,以便编译器都不会产生警告?

0 投票
1 回答
432 浏览

java - Java 泛型使用中特定原始类型/未经检查的强制转换组合的名称

Effective Java 2nd Edition说我们不应该在新代码中使用原始类型,并且我们还必须尝试消除所有未经检查的强制转换警告,并在我们选择禁止此类警告时证明并记录其安全性。

但是,我反复看到一种特殊的用法,它以类型安全的方式结合了原始类型和未经检查的强制转换。在其最典型的形式中,我们有:

  • static final使用原始类型声明并引用不可变对象的字段
  • static使用未经检查的强制类型转换返回此字段的参数化版本的通用方法

这种“模式”最著名的例子见于java.util.Collections

问题是:

  • 这个成语叫什么?
  • 以前在哪些权威资料中讨论过这个成语?

也可以看看

  • 有效的 Java 第 2 版
    • 第 23 条:不要在新代码中使用原始类型
    • 第 24 条:消除未经检查的警告
0 投票
5 回答
9389 浏览

java - 为什么类优先于类

如果我将一个类声明为一个字段:

Eclipse 给了我警告:

类是原始类型。对泛型类的引用应该被参数化

这在实践中意味着什么?为什么我要这样做?如果我要求 Eclipse 进行“快速修复”,它会给我:

这似乎并没有增加太多价值,但不再发出警告。

编辑:为什么类是通用的?您能否举一个参数化的例子,即是否可以有效地使用除 之外的东西<?>

编辑:哇!我还没有意识到这其中的深度。我还看过 Java Puzzler,它肯定让我对捕熊陷阱感到害怕。所以我会一直使用

而不是

(但是从第一天开始就使用 Java,我并没有真正注意到 Class 何时变为泛型);

注意:我接受了@oxbow_lakes,因为这对我来说很有意义,但这显然是一个非常复杂的领域。我会敦促所有程序员使用特定的Class<MyString>而不是Class. 并且Class<?>Class.

0 投票
2 回答
1516 浏览

java - Java 无类型泛型类,删除它们的函数泛型类型

好的关于 javas 泛型、可迭代和 for-each 循环的问题。问题是,如果我声明我的“测试”类没有类型,我会丢失所有函数的所有通用信息,并且 for-each 根本不喜欢这样。

例子

当 'Test t' 没有类型时,'iterator()' 函数返回 'iterator' 而不是 'iterator < Integer >'。

我不确定它背后的原因,我知道一个解决方法就是在 'Test < 上使用通配符?> t = 新测试()'。然而,这是一个不太理想的解决方案。
他们有什么方法可以只编辑类声明及其函数并让 for each 循环工作无类型?

0 投票
2 回答
1250 浏览

scala - 当类层次结构中有原始类型时,为什么 Scala 会抱怨非法继承?

我正在编写一个包装器,它采用 Scala并触发与Eclipse/JFace 数据绑定框架ObservableBuffer兼容的事件。

在 Databinding 框架中,有一个抽象ObservableList来装饰一个普通的 Java 列表。我想重用这个基类,但即使是这个简单的代码也失败了:

有错误:

为什么?它与原始类型有关吗?ObservableListimplements IObservableList,它扩展了原始类型java.util.List。这是预期的行为,我该如何解决?