请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,能不能对java的duck typing 缺点再举一个例子呢,看了视频还不是很明白

https://img1.sycdn.imooc.com//szimg/5a942c4300011ff108560500.jpg

1.定义一个接口,同时有readable 和 appendable 方法是可以的啊,为什么视频讲解中说不行?

正在回答

3回答

ccmouse 2018-02-27 10:11:03

比如我有一个类,名字叫ReadWriter,实现了Readable和Appendable。别人要同时使用Readable和Appendable接口,那么别人要定义一个叫做ReadableAndAppendable接口。

然而我的ReadWriter虽然分别实现了Readable和Appendable,但是并没有实现ReadableAndAppendable。我要给别人用,也要“跟着改”,去实现ReadableAndAppendable。

我之后的例子里会采用Retriever和Poster模拟这样的任务,可以看到Go语言能够很自然的完成。您可以用这个Retriever和Poster的例子想想在Java中很难做到。

2 回复 有任何疑惑可以回复我~
  • 提问者 IT小书童z #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-02-27 23:15:38
  • 那我们可以同时引入两个接口吗,java有这样的设计吗
    回复 有任何疑惑可以回复我~ 2018-03-02 23:39:26
  • 比如,老师说的readable和appendable,那只需要在java里面定义两个函数,然后让需要使用的类来继承这个类,这样不就可以直接引用这两个类吗?为什么一定要有接口呢,老师我问的问题可能有些弱智,因为我实在不懂接口的设定是为了什么。。
    回复 有任何疑惑可以回复我~ 2018-03-02 23:56:42
bbmouse 2019-07-02 17:24:01

这个问题,我来说明下,假设同学A写了一个方法copyFile,这个方法需要传入一个参数,这个参数需要既能读也能写,A同学就想,我们写代码一定要面向接口编程,所以写了一个接口CanReadAndWrite来作为方法的参数,代码大概长下面这样:

public interface CanReadAndWrite {
    String read();
    void write();
}
public static void copyFile(CanReadAndWrite rw) {
    // TODO...做一些文件拷贝的工作
}

A同学想,我定义了这个公共方法,以后组里面的其他同事如果需要这个功能,调用这个方法就行了!!

然后B同学刚好也需要一个类似的copyFile的方法,B同学英语可能不咋滴,按他的理解,这个方法应该大概叫copySomething,于是他搜索来一下,发现没这样的方法,于是想自己封装一个,于是有来下面的代码:

public static <R extends Readable & Writeable> void copySomething(R r){
    // TODO...做一些文件拷贝工作
}

B同学英语虽然不咋样,但是编程基础更好,他想传进来的参数既能读又能写,那这个对象应该实现读写的接口,他先到jdk中找有没有这样的接口,发现了Readable接口和Writeable接口(假设jdk有这两个接口,我这里是随便写的),于是就限定参数必须实现这两个接口,既然jdk已经提供了就不需要自己定义了嘛!(而且接口的功能应该是单一性的,A同学的这个接口定义的确实不咋地)

最后,问题出现了,这个A同学虽然编程思维不如B同学,但他是项目组老大,他说:B同学,你这个接口已经有现成的了(也就是他自己定义的copyFile),大家用的都是这个,不要搞特殊化了,你也用这个吧,此时B的功能开发的差不多了,现在如果要改成A的copyFile方法,传的参数就必须实现A同学的CanReadAndWrite接口,,,,


以上就是大概的说明,举的例子比较简单,项目中可能更复杂,大家可以展开想象,

duck typing的概念应该就是只要参数有read方法和write就行,我不用你实现啥接口,如果有duck typing,B同学的参数就能传到A同学定义的copyFile方法里,

4 回复 有任何疑惑可以回复我~
  • 老哥 这个例子举得很好啊,谢谢。 duck typing就是 不管你是什么,只看你能做什么。
    回复 有任何疑惑可以回复我~ 2021-07-08 06:17:26
提问者 IT小书童z 2018-02-26 23:54:24

还有用的人会一路跟着改是什么意思?能够举个例子呢

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信