关于泛型和Serializable接口的疑惑

掌心一点微笑 2018-11-15 05:14:47
本人新手,求大佬指点一个问题:

public class UserInfo extends ValueObject<String> implements java.io.Serializable{
}
UserInfo类是我自定义的一个类,需要继承ValueObject<T> 这个类,传入泛型String.

public abstract class ValueObject<T extends Serializable> implements Serializable {
}
ValueObject类如上,问题是 Serializable是一个标示接口,代表实现该接口的类可以串行化,序列化,但是

<T extends Serializable> 这一句,我是实在没看懂,求大佬解释一下.主要问题是:Serializable是一个接口,为什么会用extends关键字?继承接口?不应该是 实现吗?
...全文
247 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
掌心一点微笑 2018-11-16
  • 打赏
  • 举报
回复
引用 4 楼 u010056105 的回复:
简单的例子:
public interface ABC {
    void printABC();
}
public class D<T extends ABC> implements ABC{

    @Override
    public void printABC() {
        System.out.println("ABC");
    }
}
public class E extends D<F>{
}
public class F implements ABC {
    @Override
    public void printABC() {
        System.out.println("abc");
    }
}
这样是可以编译过的 但是把F修改成
public class F {
}
public class E extends D<F>{
}
就编译不过了 这里会报错Type parameter 'TestInterface.F' is not within its bound; should implement 'TestInterface.ABC' 你刚才那段代码其实ValueObject<String>和ValueObject<T extends Serializable> String已经实现了Serializable所以ValueObject<String>可以编译 如果你把String换成你自己写的一个其他的没有实现过Serializable的类 就会报错,这个写法不是表示继承 是表示限定
谢谢大佬指点,昨晚回去学习了一下泛型的上限下线和pecs原则,理解了.
Sandm_ 2018-11-15
  • 打赏
  • 举报
回复
换而言之就是 ValueObject<T extends Serializable>表示T可以是Serializable的实现类 也可以是继承Serializable的接口
Sandm_ 2018-11-15
  • 打赏
  • 举报
回复
简单的例子:
public interface ABC {
    void printABC();
}
public class D<T extends ABC> implements ABC{

    @Override
    public void printABC() {
        System.out.println("ABC");
    }
}
public class E extends D<F>{
}
public class F implements ABC {
    @Override
    public void printABC() {
        System.out.println("abc");
    }
}
这样是可以编译过的 但是把F修改成
public class F {
}
public class E extends D<F>{
}
就编译不过了 这里会报错Type parameter 'TestInterface.F' is not within its bound; should implement 'TestInterface.ABC' 你刚才那段代码其实ValueObject<String>和ValueObject<T extends Serializable> String已经实现了Serializable所以ValueObject<String>可以编译 如果你把String换成你自己写的一个其他的没有实现过Serializable的类 就会报错,这个写法不是表示继承 是表示限定
掌心一点微笑 2018-11-15
  • 打赏
  • 举报
回复
引用 1 楼 u010056105 的回复:
T extends Serializable 表示包括 Serializable在内的任何子类 这是泛型相关知识
我不是不理解泛型接口,我是不理解<T extends Serializable>这种写法,直接 传一个<T> 我能理解,传<T extends Serializable>, T在此处代表一个类吧,一个类 继承 Serializable接口? 不应该用 实现吗?
掌心一点微笑 2018-11-15
  • 打赏
  • 举报
回复
引用 1 楼 u010056105 的回复:
T extends Serializable 表示包括 Serializable在内的任何子类 这是泛型相关知识
Serializable这是接口,能用extends 修饰吗?
Sandm_ 2018-11-15
  • 打赏
  • 举报
回复
T extends Serializable 表示包括 Serializable在内的任何子类 这是泛型相关知识

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧