问题标签 [unchecked-cast]
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 - 未经检查的演员表问题
我有一个自动完成适配器,但我收到了这个警告: Unchecked cast: 'java.lang.Object' to 'java.util.ArrayList'
这是我得到它的过滤器的代码:
这条线有问题:
我知道这只是一个警告,我可以抑制它,但我想避免强制转换而不是抑制警告。有谁知道该怎么做?
java - 通过使用未经检查的类型转换避免使类泛型
假设我创建了一个process
带有公共类的包Processor
,它有一个构造函数,它需要一个类型的参数Container<I>
。该类Container<I>
位于我无法控制的不同包中,并且包含任意类型的对象I
。包含项目的容器在包的多个类之间传递process
。
这些项目是通过接口的方法处理的Processable
。process
用户可以通过 方法检索它们getProcessedItem(Property property)
。此方法返回一个处理过的项目,该项目的属性property
确保被传递的容器包含,因此可以转换为容器的类型参数。
示例类:
在这种情况下进行未经检查的类型转换通常是一个好主意吗?
到目前为止,我想出的唯一合理的替代方案是使包process
中所有必须持有对参数化容器(如ItemProcessor
)的引用的类也是通用的,只是为了保留getProcessedItem(Property property)
.
编辑: 在我的示例中阐明容器类的功能:
我希望容器类代表一些相当原始的类集合类,它应该只使处理器能够检索它必须处理的项目。
这意味着ItemProcessor
和所使用的类ItemProcessor
应该能够按照他们喜欢的方式处理可处理的项目(一旦从容器中检索到它们)(例如,将它们存储在列表或其他数据结构中)。最后,应该可以根据某个特定于处理器的属性请求已处理的项目。例如:
像java 的标准集合类(例如ArrayList
)Container<I>
并不严格保证它只包含I
及其后代。这意味着一旦容器的一个项目被用作 a Processable
,而实际上不是 a Processable
,就会发生强制转换异常。
在上述处理器类的版本中,当通过请求的项目getProcessedItem
与类型不兼容时I
(由于未经检查的强制转换),不会立即引发异常。但是,如果我创建了ItemProcessor
泛型 ( ItemProcessor<I>
) 并getProcessedItem
返回了 I 而不是使用未经检查的强制转换,那么此时不会引发异常。因此,我也不确定Class<I>
使用getProcessedItem
. 该Class<I>
对象必须由调用者作为参数或通过给定的容器显式提供。我觉得处理器不应该确保容器中的项目实际上与 兼容I
,因为处理器不对给定容器内容的有效性负责。
java - 有趣的未经检查的演员表警告
鉴于此代码:
我在从 MyInterface 到 T 的演员表中收到未经检查的演员表警告。
我真的不喜欢它,所以我使用 Class.cast() 方法来代替它。现在我的新功能如下所示:
但是这个给出了一个从 Class<?> 到 Class<T> 的未经检查的强制转换警告,因为 Object.getClass() 返回一个通配符类。
但是,key.getClass().getComponentType() 是否有可能不会返回 Class<T> 因为 T 是由 key 类的组件类型定义的?
java - 为原始类型抛出不一致的 ClassCastException
执行以下代码时,代码执行完美,没有任何错误,但是对于 type 的变量,方法List<Integer>
的返回类型get()
应该是 Integer,但是在执行此代码时,当我调用时x.get(0)
返回一个字符串,而这应该抛出一个例外。
但是在执行下面的代码时,只需将返回对象中的类检索添加到前一个代码块中就会引发类转换异常。如果上述代码完美执行,则以下代码也应该毫无例外地执行:
为什么java在获取对象的类类型时会执行类型转换?
java - Java:抽象类的具体方法的返回类型变为原始
以下代码在使用 -Xlint 编译时给出了两个警告。其中之一声明 typeC<Double>
是必需的,但C
已找到,即使返回类型非常清楚C<Double>
。
我找到了一个消除这两个警告的解决方案,但我不明白(也想知道)为什么这是一个警告以及为什么它消失了。
代码:
警告:
警告的解决方法:
我static void thing(A a)
改为static void thing(A<?> a)
.
但:
没有理由a.a()
返回C
,而不是C<Double>
随处说明的返回类型。当类型参数不影响时,我不明白为什么A
原始应该使其所有方法的返回类型都是原始的;A
.a()
java - 从 UnorderedListADT 生成 UnorderedVector,但出现未经检查的强制转换错误
在处理这个铸造对象和诸如此类的概念时,我现在非常困惑,但我相信我已经非常接近完成了。如果您可以查看我的代码并提示我可以做些什么来停止收到此错误,那就太好了。
这是我在第一次回复的建议之后的第二次尝试(但是,仍然收到未经检查的强制转换错误):
java - 访问泛型类成员时如何避免强制转换
我有一种情况,我希望允许用户填写表单,其中输入数据是字符串值或布尔值的列表。这很像任何手机上的设置列表,一系列字符串值和切换。
所以,我有一个Field
这样定义的对象:
问题是当我在 a 中显示这些RecyclerView
值或只是从 a 中获取值时Map
,没有安全的方法可以知道值是什么类型,字符串或布尔值。
正因为如此,我最终得到了很多(String)field.getValue()
and ((Field<String>)field).setValue("someString")
。有没有办法完全避免铸造?我完全愿意改变我对这个Field
对象的设计方法,我只是希望它是干净的。
我已经考虑过使用类似getStringValue()
and的方法,getBooleanValue()
以便调用者知道它在运行时获取的是 String 或 Boolean,但这会导致每个字段都有一个返回有效对象的方法,而其他字段返回 null。我希望调用者不必知道它返回了什么。
谢谢你的帮助!
更新
这是我如何从 LinkedHashMap 访问字段并Person
使用它们创建对象的示例:
java - 如何将未经检查的对象转换为 ArrayList
Vehicle
对于一个类,我被分配编写代码以使用 ObjectInputStream ( in
)读取该类的对象。这些对象存储在一个名为 的 ArrayList 中orders
。
SSCE:
但是,编译器抱怨:
我总是尝试改进我的代码,而不是忽略或抑制警告。在这种情况下,我想出了一个解决方案,但我试图了解它为什么起作用,以及是否有更好的解决方案。
此更新停止警告:
根据我从我一直在阅读的内容中了解到的内容,它可以工作,因为(ArrayList<Vehicle>) obj
如果不是所有元素都是Vehicle
. 我很困惑 - 非车辆对象可以添加到 ArrayList 即使其类型参数已指定为Vehicle
?此外,是否有更好的解决方案,例如使用instanceof
?
android - 如何在不抑制警告的情况下解决 android 中的 Unchecked cast
如何在不使用 SuppressWarning("uncheckedcast") 的情况下解决此问题,这有任何方法可以在投射之前检查对象或解决此问题的任何其他方法。问题在 onLoadFinished() 内部。如您所见,我将数据用于不同的数据类型,首先是布尔值,然后是列表。先感谢您。