gpt4 book ai didi

Java 1.4 到 Java 1.5 - 重写代码并避免 @SuppressWarnings

转载 作者:行者123 更新时间:2023-11-30 07:36:39 25 4
gpt4 key购买 nike

我有一个用 Java 1.4 编写的旧个人项目,我正在将版本 2 移植到 1.5(我仍然是新手)。除了向其添加新功能和重构代码外,我还迁移到通用集合,注释等

有一段代码我不知道如何更改为 1.5,也不想在上面添加 @SuppressWarnings。它是这样的:

if (value instanceof Comparable) {
isMatch = (((Comparable) value).compareTo(selectedValue) == 0);
} else {
//fallback to equals
isMatch = selectedValue.equals(value);
}

这只是在 compareTo() 中与广泛匹配进行简单比较,如果不是 Comparable 类型,则默认为普通 equals()。

我得到一个:Comparable is a raw type. References to generic type Comparable<T> should be parameterized警告。

如何将上面的代码修改为1.5并清除警告。或者除了添加@SuppressWarnings 别无选择?

最佳答案

具体来说,您会收到警告,因为您需要限定 Comparable在 Actor 中有一个类型参数。这样你就有((Comparable<Type>)value) , 其中TypeselectedValue 的(的基类型)类型.

但是,即使您这样做,您仍然会收到警告。这一次,问题是 <Type>编译时“消失”,这意味着无法确保该类实际上是 Comparable<Type> .您只能检查对象是否为 Comparable .考虑以下测试应用程序:

class Type{
public int x = 0;
}

class Other implements Comparable {
public int compareTo(Type obj) {
return obj.x;
}
}

class Test {
public static void main(String[] args) {
Other obj1 = new Other();
Object value = obj1;
String selectedValue = "";
if (value instanceof Comparable) {
System.out.println(((Comparable<String>) value).compareTo(selectedValue));
}
}
}

代码编译时出现警告,因为 while valueComparable它无法与 String 相提并论秒。后者仍然更可取,因为您至少可以检查参数是否属于“预期”类型。

最后,您需要 @SuppressWarnings .

请注意,如果您希望它与任何类一起使用。然后你也可以保持原样(或使用 Comparable<Object> 因为它们(在这种情况下)等效)。添加 @SuppressWarnings , 显然。

关于Java 1.4 到 Java 1.5 - 重写代码并避免 @SuppressWarnings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com