java - 为什么我会收到此错误 "Type mismatch: cannot convert from Serializable to T"?

标签 java generics serialization casting

使用以下代码:

主.java

 // ...

 private static <T extends Serializable> T doStuff() {
     Response r = ...

     // ...

     return r.getDetails();//Error here
 }

 // ...

Response.java

 interface Response {
    // ...

    Serializable getDetails();

    // ...
 }

我在 doStuff 方法中收到此编译错误:“类型不匹配:无法从 Serializable 转换为 T”。

如果我转换返回的结果,错误就被移除了。

  return (T)r.getDetails();

但现在我有这个警告:类型安全:未检查从 Serializable 到 T 的转换@SuppressWarnings("unchecked") 会抑制警告,但我发现这个解决方案很难看。

还有更好的选择吗?

最佳答案

问题是根据您的代码,每个 T 都必须是一个 Serializable,但并非每个 Serializable 也是一个 T

假设 T1T2 都是Serializable,以下也会导致问题:

T1 t = new T2();

因为 T1T2 不相关,即使它们都是Serializable

关于java - 为什么我会收到此错误 "Type mismatch: cannot convert from Serializable to T"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065120/

相关文章:

java - 泛型:为什么我不能将 Object 作为我的 Collection 的参数?

.net中Newtonsoft.Json.JsonConvert.SerializeObject(Object source,Newtonsoft.Json.JsonSerializerSettings())对应的java代码?

java - 如何实例化一个使用给定 double 值扩展 Number 的泛型类?

java - java.util.Optional为什么不是Serializable,如何用这样的字段序列化对象

ruby-on-rails - Rails ActiveModel::Serializers 中的 JSON API 样式旁加载

java - Selenium 点击并不总是有效

java - 带 am/pm 的日期对象的格式

Java:路径与文件

java - Java 中读取文件类型 (MIME) 返回 null

java - 在 Java 中, 'extends' 在这种情况下也意味着 'implements' 吗?