我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表):
...
Map<? estends SomeType, SomeOtherType> map;
...
Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map;
...
我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行:
我只是使用@SuppressWarnings(“ unchecked”)取消警告。
答案可能很无聊:出现警告时,它不是类型安全的。而已。
__在此示例中可以看到 为什么 它不是类型安全的:
import java.util.HashMap;
import java.util.Map;
class SomeType {}
class SomeSubType extends SomeType {}
class SomeOtherType {}
public class CastWarning
{
public static void main(String[] args)
{
Map<SomeSubType, SomeOtherType> originalMap = new HashMap<SomeSubType, SomeOtherType>();
Map<? extends SomeType, SomeOtherType> map = originalMap;
Map<SomeType, SomeOtherType> castedMap = (Map<SomeType, SomeOtherType>) map;
// Valid because of the cast: The information that the
// key of the map is not "SomeType" but "SomeSubType"
// has been cast away...
SomeType someType = new SomeType();
SomeOtherType someOtherType = new SomeOtherType();
castedMap.put(someType, someOtherType);
// Valid for itself, but causes a ClassCastException
// due to the unchecked cast of the map
SomeSubType someSubType = originalMap.keySet().iterator().next();
}
}
我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我! 有什么方法可以克服这个问题,或者我可以安全地压制警告吗?
我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?
强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则
我有一个父类来处理我所有的自定义异常,父母异常。我希望所有的子异常都有一个方法来向异常添加消息。为了做到这一点,我创建了一个泛型方法,在向其添加消息后返回泛型类型的对象。我在父类方法中使用来添加消息,然后返回,但是由于该方法返回泛型类型,所以我将其转换为泛型类型T。这似乎是可行的,但是给出了警告。我的代码如下: 该行给出的警告是。这种方法似乎确实如预期的那样有效,所以我并不担心,但我想更好地理解为
我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类
有没有一种简单的方法可以做到这一点: 编辑:我写了一份正确答案的工作副本: