当前位置: 首页 > 知识库问答 >
问题:

强制转换为泛型类型(T)会发出“未检查强制转换”警告

程仲卿
2023-03-14

我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我!

public class Model {
}
public class ClassA<T extends Model> {
    private List<T> models;

    public ClassA() {
        models.add((T) new Model());
    }
}
models.add((T) new Model());

有什么方法可以克服这个问题,或者我可以安全地压制警告吗?

共有1个答案

金晗日
2023-03-14

你不能做你想做的事。

因为tmodel的子类:

  • 每个t都是模型
  • 但并不是每个模型都是T
(Subclass) new Superclass();

因此,您不能成功地将新模型转换为T的实例。

编译器只会给您一个警告,您可以忽略或禁止该警告,但是当您运行程序并调用add()方法时,您将得到一个ClassCastException

 类似资料:
  • 强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则

  • 问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错了什么?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做

  • 问题内容: 我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表): 我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行: 使用SomeType类型的键从castedMap获取元素 使用SomeType类型的键将元素放入castedMap中。 我只是使用@SuppressWarnings(“ unchecked”)取消警告。 问题答案: 答案可能很无聊

  • 问题内容: 我遇到了Java的异常行为,似乎是一个错误。是吗?即使对象不是的实例,也无法将对象强制转换为通用类型(例如)。这是一个例子: 更新 :感谢cletus和Andrzej Doyle的有用答案。因为我只能接受一个,我接受安杰伊·多伊尔的答案,因为它使我一个解决方案,我觉得是不是 太 糟糕。我认为这是在单行代码中初始化小型Map的更好方法。 然后您这样称呼它: 问题答案: 就像cletus所

  • 我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?

  • 问题内容: 不知何故,我的旧问题已关闭,因此我打开了一个新问题: 我正在使用Java泛型从SQL查询中实现泛型双向Hash Map。它应该能够来回映射String,Integer对的任何组合。应该这样使用: 当然应该可以创建一个pm(Integer,Integer)等等。 我选择地图的实现如下所示(没有getter …): 我没有编译器错误,而且我很确定,它将以这种方式工作。但是我在“ getIn