问题标签 [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 投票
1 回答
794 浏览

java - 带有原始泛型类型参数和 Optionals 的 Java 奇怪的编译错误

以下 Java 代码无法编译(使用javac 1.8.0_121

我的问题是:为什么代码不能像上面f1那样编译,如果我改为采用原始类型,为什么它会编译:

我的猜测是,这opt.map被推断为返回Optional<Object>(而不是Optional<B<Integer>>),但为什么呢?我已经研究了泛型和类型擦除(JLS 4.8)的其他问题,但它们都处理在原始类型本身(例如this)上调用方法时的情况。这里,opt不是 raw,它只需要一个 raw 类型参数。另外,为什么第二个版本(其中参数a是 rawB而不是B<Object>)有效?

编译错误信息

Error java: incompatible types: java.lang.Object cannot be converted to B<java.lang.Integer>

0 投票
2 回答
55 浏览

c++ - 模板类型背后的意义是什么?

通过使用模板:

接着

我的问题是:

为什么我需要这样做:

如果我能做到

为什么会编译?

lm是与双精度相差甚远的整数时?

0 投票
2 回答
287 浏览

java - 将 java 转换为 scala 代码 - 方法签名的更改

尝试将一些 java 转换为 scala 代码时,我遇到了在 java 世界中编译得很好的不同方法签名的问题:

java中的以下代码(来自https://github.com/DataSystemsLab/GeoSpark/blob/master/babylon/src/main/java/org/datasyslab/babylon/showcase/Example.java#L122-L126

翻译成https://github.com/geoHeil/geoSparkScalaSample/blob/master/src/main/scala/myOrg/visualization/Vis.scala#L45-L57

这将引发以下错误:

不幸的是,我不确定如何解决这个问题/如何正确调用 scala 中的方法。

0 投票
3 回答
377 浏览

java - 通用列表和 for-each 循环

我正在使用TestThrows< T >带有返回泛型列表的包含函数的泛型类。我的问题是我无法编译这个程序,它抛出以下错误:

类型不匹配:无法从元素类型 Object 转换为 Throwable

我不确定为什么在使用通用列表时会出现此错误?

0 投票
2 回答
963 浏览

java - 作为原始类型 Comparator 的成员对 compare(T,T) 的未经检查的调用

我们正在将现有代码从 Java 1.5 迁移到 Java 8,并且在使用 -Xlint 进行编译时,我遇到了诸如“未检查调用compare(T,T)作为原始类型的成员”之类的警告Comparator

我大致了解我需要以某种方式告诉我要传递的数据类型Comparator,但我使用的是泛型,所以我可以传递不同的数据类型,所以我怎样才能消除这个警告。

这是我看到此警告的代码片段:

而且,这被称为:

既然我已经Comparator<T> comparatorsetSort()方法中说了,为什么我仍然收到以下错误?

0 投票
0 回答
93 浏览

java - 对泛型和子类型感到困惑

所以,假设我们有一个简单的界面

这基本上添加了一个带有参数化类型的 copyFrom 方法。你有一个扩展它的接口:

除了类型之外,该接口当然没有添加任何有价值的东西,但让我们假设其中有一些有用的方法。这个想法还是一样的——这个接口的所有对象都有一个 getType() 方法,它们可以将一个相同类型的对象从一个对象复制到另一个对象。

现在让我们有这个接口的两个实现,第二个实现继承自第一个:

所以第二个对象(ActualObject2)应该扩展ActualObject1,但如果这样做,它就不能实现正确的“copyFrom”方法,因为第一个类只为自己实现接口ISomeObject。它显然希望以某种方式允许将 ActualObject2 相互复制。但是怎么做?

它不能只声明实现 ISomeObject ,因为它会与其父级的实现类型发生冲突。所以你会想做类似的事情吗?

基本上参数化class1,class2将自己指定为参数。一切正常,您可以创建两种类型的实例:

但是有一个“小”问题 - obj1 有一个原始类型。完整的声明看起来相当愚蠢:

但它有效。然而,这个类的“原始类型”性质可能会咬人,例如在这个 scanario 中:

因此,您正在创建一些由 <T extends ISomeObject<T>> 参数化的随机类。理论上你可以这样说:<T extends ISomeObject> 但是你不能安全地在“copyFrom”中使用 T。换句话说 - 这是一个有效的类参数化,它有一点。

但是你不能为 ActualObject1 参数化它:

是的 - 不起作用。暗示:

工作得很好...

那么这里的正确方法是什么?我对尽可能地保留类型安全更感兴趣,因为可以肯定你可以一直使用原始类型而不必担心任何事情,但它是为弱者准备的!:-)

我们使用的是静态类型语言,所以这有点像一个学术问题——用泛型设计这个类层次结构的正确方法是什么?是否偶尔需要使用原始类型才能正常工作?

0 投票
2 回答
274 浏览

java - 为原始类型抛出不一致的 ClassCastException

执行以下代码时,代码执行完美,没有任何错误,但是对于 type 的变量,方法List<Integer>的返回类型get()应该是 Integer,但是在执行此代码时,当我调用时x.get(0)返回一个字符串,而这应该抛出一个例外。

但是在执行下面的代码时,只需将返回对象中的类检索添加到前一个代码块中就会引发类转换异常。如果上述代码完美执行,则以下代码也应该毫无例外地执行:

为什么java在获取对象的类类型时会执行类型转换?

0 投票
0 回答
215 浏览

java - Javafx:表单元格获取表行

我想知道为什么TableCell'sgetTableRow()方法没有 Generic 而 Table 单元格有,很明显返回类型与单元格的泛型定义相同。举个例子:

我有一堂课:

首先,我必须将其强制转换为(S),并且有一个警告: 未经检查的强制转换:java.lang.Object。原因:'getTableRow()' 具有原始类型,因此 getItem 的结果被擦除。但为什么?例如,在TreeTableCell这个工作正常的方法有:

public final TreeTableRow<S> getTreeTableRow() { return treeTableRow.get(); }

所以你不必将它强制转换为(S). 我正在研究一点,我发现了这个:https://bugs.openjdk.java.net/browse/JDK-8096461,但是这个链接和相应方法的javadoc都没有,不要对我说什么。该错误的解决方案也设置为不会修复,但我不明白为什么,或者为什么以这种方式开发,没有通用。你能解释一下或给出一些我可以用来理解它的东西吗?

0 投票
1 回答
52 浏览

java - 将对象安全地添加到无法设置的原始列表(Java AST)

我正在使用 Java AST (JDT),并且必须将org.eclipse.jdt.core.dom.Type实例添加到原始列表(Java 5 之前的代码),该列表仅包含类型元素Type(API 保证它)。我访问列表TypeDeclaration.superInterfaceTypes()由于类TypeDeclaration的编写方式(超级接口类型没有设置器),我必须直接添加元素,不能简单地创建List<Type>实例,复制元素,添加我的新元素,然后设置新名单。因此,我最终会收到编译器警告。

这是我当前的代码:

我可以使用比抑制警告更优雅的解决方案来解决这个问题吗?

0 投票
1 回答
112 浏览

java - What is the right way to avoid using raw type Comparable in a sort algorithm?

I am writing a merge sort algorithms, so I want all the methods take arguments that implements Comparable interface, i.e. having a method called compareTo.

I have been told many times to avoid using raw type in new code. But I can't find a right way to replace them.

The question What is a raw type and why shouldn't we use it? is different from mine. Actually, I have read the question before. Still, I don't know how toa avoid using Comparable here.