问题标签 [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警告observer.update((T)this);
。
当阅读一点关于此的内容时,编译器是正确的(出乎意料),它甚至被认为是臭代码,因为您可以编写实际触发ClassCastException的代码。
现在我正在寻找一种不臭且坚如磐石的解决方案。然而,观察者不需要寻找它正在观察的主题的想法是我非常喜欢的。另外,我真的不喜欢观察者需要自己在他们的update()
. 你对如何使用这个有什么建议吗?
编辑
我的观察者被声明为这样的接口:
java - Java 未经检查强制转换为类型参数警告,尽管它是
考虑你有这个列表:
它包含一堆 AbstractXmlElement 子类的对象,并且您想要添加一个方法来从该列表中过滤特定子类的对象。为此,我创建了以下方法:
然而 (E) e 导致 UncheckedCast 警告。我想知道这究竟是一个未经检查的强制转换,以及抑制这个警告是否安全,因为那些不是 E 实例的对象在强制转换之前被过滤掉了。这意味着,据我所知,演员阵容永远不应该失败
java - 使用泛型删除未经检查的强制转换警告
我刚接触 Java 的泛型,所以我为自己建立了一个小项目。我想制作一个向量/点,您可以在其中指定Number
(例如Double
,、、Integer
等Long
)。
我最终得到了一个像样的类对象,但是注意到有关方法的一些问题。
最后一个方法,即加数方法,会引发未经检查的强制转换警告。在我做了一些研究之后,我发现它的行为很奇怪,因为我对泛型比较陌生,无法正确排除故障。
如何return (T) bd;
创建警告?T
必须是 a 的一个实例Number
,所以它应该可以转换为 a BigDecimal
,对吧?
所以我创建了我的小测试方法,
它工作得很好,打印出来2.0 5.7
和4.2 9.6
.
那么问题是当我使用来自 的方法时Double
,例如Double#isNaN()
. 然后它抛出 ClassCastException, Exception in thread "main" java.lang.ClassCastException: java.base/java.math.BigDecimal cannot be cast to java.base/java.lang.Double
。
这似乎与人们遇到的其他问题很常见,但是,尽管查看了资源,但我不明白为什么使用这些Double
方法会引发错误。对象应该是Double
演员后的,对吧?
java - 不安全或未经检查的操作警告
在一个应用程序中,我使用 SharedPrefernces 来保存/加载(序列化/反序列化)一些对象。
这是反序列化代码:
但是每当我编译这个项目时,这行:
导致包含此方法的类“使用未经检查或不安全的操作”的警告。
如何摆脱此警告或更改我的代码以更安全?
java - 从 X 到扩展 X 的泛型类型的未经检查的强制转换
我的任务@SupressWarning
是在我们的代码库中删除尽可能多的 s,但我不确定如何解决这个特定问题。
我有这个返回对象的外部方法,以及我想将对象转换为Serializable
的泛型类型。T extends Serializable
这是代码的简化版本:
是否可以在不产生未经检查的强制转换警告的情况下执行此转换(假设无法更改外部方法)?
这是Java 8。
java - 避免在从 Enum 填充的 ChoiceBox 中进行未经检查的强制转换
我编写了以下自定义 ChoiceBox,它从实现下面我的接口 DisplayName 的通用 Enum 填充自身:
基本上,一切正常,编译器也对第一个和第三个构造函数感到满意。但是,在我看来,第三个构造函数中的两个参数是不必要的:传递默认值就足够了,因为它已经包含了类信息。
所以,这就是我试图用第二个构造函数来实现的,但是我收到一个警告,说我做了一个未经检查的演员表。有没有办法解决/解决这个问题(除了抑制警告)?
java - 在地图上未经检查的演员(JSON 与 Jackson 转换为 Map)
在 Java 8 中,我想将 JSON 字符串转换为映射,并对键应用“复杂”转换。例如,“复杂”转换将只是小写转换。输入 JSON 中的值可以是字符串或嵌套的 JSON 对象。我的代码实际上正在运行,但我很难修复unchecked cast
警告。
例子
示例 JSON 输入 ( String
) :
所需输出 ( Map
) :
1. JSON 字符串 -> 映射
对于那部分,我使用了 Jackson (2.9.8) 并定义了以下函数:
由于值可以是字符串或 JSON 对象,因此该函数的返回类型是Map<String, Object>
. 另请注意,
readValue
(在ObjectMapper
类中)使用泛型,其签名是:
2. 映射 -> 带有转换键的映射(例如:小写)
我定义了以下功能:
为了处理嵌套地图,这个函数是递归的。但由于它需要一个Map<String, Object>
as 参数,我必须强制value
转换Map<String, Object>
为递归调用该方法。
3. 将所有内容放在一起
此代码按预期工作并打印:
{key1=value1, key2={key2.1=value2.1}}
但是函数中的这一行transformKeys
:
产生警告:
警告很清楚,我理解(编译器不知道是否value
真的是 的实例Map<String, Object>
),但是有没有办法摆脱它?
(@SuppressWarnings
请不要,也不要-Xlint:none
):D
我觉得返回Map<String, Object>
fromconvertJsonStringToMap
不是将 JSON String 转换为 Map 的最干净的方法,但我找不到其他方法来处理 Jackson。
java - Unchecked cast from generic type to the same type
The following code generates a warning Unchecked cast: 'T' to 'U'
in IntelliJ IDEA:
This doesn't make sense to me, since T
and U
are defined as the same type. What is the problem?
android - 有没有办法在不使用 Kotlin 中的 Supress 的情况下处理未经检查的强制转换警告?
我在我的 android 应用程序中使用 ViewModelFactory 将一些数据从 Fragment 传递给我的 ViewModel。我收到未经检查的演员表警告。如果我使用抑制,警告就会消失。我想知道有没有办法在不使用 Supress("UNCHECKED_CAST") 的情况下处理这个问题
我用来创建 ViewModelFactory 的代码
因为 T 收到警告。
android - 我相信按钮约束问题
希望周末一切顺利。我正在处理登录和注册页面,很难找到解决未经检查的强制转换错误的方法,经过检查,xml 代码似乎一切正常。挑战真的很令人沮丧,这是代码
爪哇代码
xml代码
任何帮助将不胜感激