为什么我会收到此错误"类型不匹配:无法从Serializable转换为T"?

Ste*_*han 1 java generics serialization casting

使用以下代码:

Main.java

 // ...

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

     // ...

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

 // ...
Run Code Online (Sandbox Code Playgroud)

Response.java

 interface Response {
    // ...

    Serializable getDetails();

    // ...
 }
Run Code Online (Sandbox Code Playgroud)

我得到这个编译错误:"类型不匹配:无法从方法中的Serializable转换为T" doStuff.

如果我转换返回的结果,则会删除错误.

  return (T)r.getDetails();
Run Code Online (Sandbox Code Playgroud)

但现在我有这个警告:Type safety: Unchecked cast from Serializable to T. @SuppressWarnings("unchecked")会抑制警告,但我发现这个解决方案很难看.

还有更好的选择吗?

Tho*_*mar 5

问题是,通过你的代码,每个T必须是一个Serializable,但不是每个Serializable都是一个T.

假设这两个T1和T2进行Serializable,下面也会导致问题:

T1 t = new T2();
Run Code Online (Sandbox Code Playgroud)

作为T1和T2不相关的,即使他们都Serializable.