《java编程思想 泛型》鸭子类型

作者: 每天学点编程 | 来源:发表于2017-08-13 23:31 被阅读155次

静态类型检查

java泛型的缺点

java泛型是通过擦除实现的,导致只能调用Object类的方法,如果需要调用其他的方法,需要设置泛型的边界。

鸭子类型的概念

"If it walks like a duck and talks like a duck, you might as well treat it like a duck."

鸭子模型只要求一组方法被实现,不要求实现特定的类和接口。

鸭子模型是代码组织和重用的机制。

支持鸭子类型的语言

动态语言:Python
静态语言:C++

支持鸭子类型的语言——Python

Python是在运行时检查。

支持鸭子类型的语言——C++

C++是在编译期检查的。
C++是通过参数类型支持鸭子模型。

Java无法实现鸭子类型

上面的例子是用泛型实现的,但是跟使用接口实现的效果差不多:

可以看出,泛型其实不是必须的,因为类已经被强制要求实现Performs接口。

使用反射实现鸭子类型


使用反射的方式实现鸭子类型,会把类型检查推迟到运行时。

使用反射实现鸭子类型例子二

使用适配器实现鸭子模型

In effect, latent typing creates an implicit interface containing the desired methods.
鸭子模型实际上创建了一个隐性的接口。
而适配器可以让已经存在或将要创建的类适配到合适的接口上。


这不是鸭子模型,也没有鸭子模型那么方便,但是总算是一种妥协。

相关文章

  • Java编程思想---泛型(3)

    Java编程思想---泛型(3) 泛型带来的各类问题 任何基本类型都不能作为类型参数 Java泛型的限制之一是不能...

  • 《java编程思想 泛型》鸭子类型

    静态类型检查 java泛型的缺点 java泛型是通过擦除实现的,导致只能调用Object类的方法,如果需要调用其他...

  • Java编程思想---泛型(2)

    Java编程思想---泛型(2) 类型擦除 先上例子: ArrayList< String >与ArrayList...

  • java中泛型(上)

    本文参考了java核心卷1中泛型程序设计该章节和java编程思想第15章。 泛型即适用于许多许多的类型。泛型最初的...

  • Java编程思想—泛型(1)

    Java编程思想---泛型(1) 泛型 简单使用 三个Holder进行对比,引出类型参数的概念 元组类库 前面的例...

  • Java泛型使用示例整理

    Java泛型使用示例整理 目标 Java泛型编程是JDK1.5版本后引入的。泛型让编程人员能够使用类型抽象,通常用...

  • 泛型:类型擦除

    Java 语言引入泛型是为了在编译时提供更严格的类型检查,并支持泛型编程。 为了实现泛型,Java编译器将类型擦除...

  • Java泛型(一)类型擦除

    前言 本文为对Java泛型技术类型擦除部分的一个总结,主要参考文献有《Java编程思想 第4版》、《Java核心技...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java 中的泛型

    1、泛型的概述: 1.1 泛型的由来 根据《Java编程思想》中的描述,泛型出现的动机:有很多原因促成了泛型的出现...

网友评论

    本文标题:《java编程思想 泛型》鸭子类型

    本文链接:https://www.haomeiwen.com/subject/wdbzlxtx.html