首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我如何反对像Java这样的强类型语言中的Duck-typing?

问题:我如何反对像Java这样的强类型语言中的Duck-typing?

答案:

尽管Duck-typing在Python等一些动态类型语言中较为常见,但强类型语言如Java并未支持。反对Duck-typing在Java等强类型语言中有以下几个原因:

  1. 类型安全:强类型语言在编译期就进行类型检查,这有助于捕捉许多潜在的错误。Duck-typing无法提供同样的类型安全。
  2. 代码可读性:强类型语言在类型转换上更具可读性,这有助于理解代码的运行过程。而采用Duck-typing,开发者可能需要花费更多时间理解代码的运行逻辑。
  3. 类型转换:Duck-typing允许在运行时进行类型转换,这可能导致运行时错误。在强类型语言中,类型转换必须在编译期进行,从而避免了这类问题。
  4. 代码可维护性:强类型语言在类型检查、类型推导和类型转换方面表现更为出色,从而使得代码更易于维护和扩展。
  5. 类型系统:强类型语言如Java具有完整的类型系统,这有助于捕捉错误和提高代码质量。而Duck-typing则降低了这种类型系统的完整性。
  6. 性能:虽然Java等强类型语言的运行时性能可能稍逊于一些Duck-typing语言,但通过类型优化和内联字段等技巧,这种差距通常不会对实际应用产生显著影响。

总之,反对Duck-typing在强类型语言如Java中的主要原因是类型安全、代码可读性、类型转换、代码可维护性、类型系统和性能。尽管Duck-typing在Python等语言中有一定的优势,但在强类型语言中,这种优势并不明显。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

封装、抽象、继承、多态分别可以解决哪些编程问题?

例子中 private、public 等关键字就是 Java言中访问权限控制语法。private 关键字修饰属性只能类本身访问,可以保护其不被类之外代码直接访问。...如果你熟悉是类似 Java、C++这样面向对象编程语言,那你对继承这一特性,应该不陌生了。继承是用来表示类之间 is-a 关系,比如猫是一种哺乳动物。...所以,继承这个特性也是一个非常有争议特性。很多人觉得继承是一种模式。我们应该尽量少用,甚至不用。...现在,我们再来看下,如何duck-typing 来实现多态特性。我们还是先来看一段代码。这是一段 Python 代码。...而像 Java 这样静态语言,通过继承实现多态特性,必须要求两个类之间有继承关系,通过接口实现多态特性,类必须实现对应接口。 多态特性讲完了,我们再来看,多态特性存在意义是什么?

79770

面向对象程序设计

首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作。而【面向对象程序设计】却调换了这个次序,【面向对象程序设计】将数据放在第一位,然后再考虑操作数据算法。...抽象 封装主要讲的是如何隐藏数据、数据访问保护,而抽象讲的是如何隐藏方法具体实现,让方法调用者只需要关心方法提供了哪些功能,并不需要知道这些功能是如何实现。...之所以这么说,那是因为类方法是通过程序设计语言中 “函数” 这一语法机制实现。通过函数包裹具体实现逻辑,这本身就是一种抽象。...在 Java 程序设计语言中,对象变量是多态。一个父类对象变量既可以引用一个父类对象,也可以引用一个子类对象。...接口类语法:一个对象变量(接口类)可以指向多种实际类型(实现类) duck-typing 语法:duck-typing 可以这样表述:“如果看起来像鸭子,叫起来像鸭子,那么它一定是鸭子”。

2K120
  • python部分常用命令

    #coding=utf-8 或者: #coding=gbk type()函数可以做什么 在介绍数据类型文章中提到过,要怎么样查看对像数据类型。...type()就是一个最实用又简单查看数据类型方法。type()是一个内建函数,调用它就能够得到一个回值,从而知道想要查询对像类型信息。...在Python程序中,每个数据都是对像,每个对像都有自己一个类型。不同类型有不同操作方法,使用内置数据类型独有的操作方法,可以更快完成很多工作。...Python中类(Class)是一个抽象概念,比函数还要抽象,这也就是Python核心概念,面对对象编程方法(OOP),其它如:Java、C++等都是面对对象编程语言。...python assert断言详细用法格式 使用assert断言是学习python一个非常好习惯,python assert断言句格式及用法很简单。

    82810

    面向对象四大特性

    封装(Encapsulation) 封装也叫信息隐藏或者数据访问保护,也就是主要讲如何隐藏信息、保护数据。 实现方式 类通过暴露有限访问接口,授权外部仅能通过类提供方法来访问内部信息或数据。...仅暴露有限必要接口,提高类易用性。 抽象 抽象讲的是如何隐藏方法具体实现,让调用者只需关心方法提供了哪些功能,并不需要知道这些功能是如何实现。...多态 多态是指子类可以替换父类,在实际代码运行过程中,调用子类方法实现。 多态实现方式 多态这种特性也需要编程语言提供特殊语法机制来实现,比如继承、接口类、duck-typing。...只要两个类具有相同方法,就可以实现多态,并不要求两个类之间有任何关系,这就是所谓 duck-typing,是一些动态语言(如Python)所特有的语法机制。...而像 Java 这样静态语言,通过继承实现多态特性,必须要求两个类之间有继承关系,通过接口实现多态特性,类必须实现对应接口。

    71010

    Python入门基础知识实例,值得收藏!

    7月编程语言指数榜已经发布,Python 在今年5月首次超越 Java 拿下榜首位置后,仍保持上涨趋势,正逐渐与 Java 拉开差距。(图为与去年 7 月数据对比) ?...1.在Python 语言中,对象是通过引用传递。 在赋值时,不管这个对象是新创建,还是一个已经存在,都是将该对象引用(并不是值)赋值给变量。...软件开发相关),包括自己整理一份2018最新Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python小伙伴 3.动态类型 变量赋值时,解释器会根据语法和右侧操作数来决定新对象类型...在对象创建后,一个该对象引用会被赋值给左侧变量。 4.所有的Python 对像都拥有三个特性 ·身份 ·类型 ·值 这三个特性在对象创建时候就被赋值,除了值之外,其他两个特性都是只读。...由于有这样一个”特性“,比较安全写代码方式就是除了那些真正需要执行代码以外,几乎所有的功能代码都在函数当中。

    34810

    Golang中interface内部构造与面试真题分析

    指向数据指针(go语言中特殊指针类型unsafe.Pointer类似于c语言中void*) } _type属性:是GO语言中所有类型公共描述,Go语言几乎所有的数据结构都可以抽象成 _type,...是所有类型公共描述,type负责决定data应该如何解释和操作,type结构代码如下: type _type struct { size uintptr //类型大小...这里interfacetype是定义interface一种抽象表示。 type表示具体化类型,与eface type类型相同。...另,GointerfaceDuck-typing机制也是依赖这个字段来实现。...Golang是类型语言,interface是所有golang类型父类 函数中func f(x interface{})interface{}可以支持传入golang任何类型,包括指针,但是函数func

    52620

    【C++】初识C++(下)

    ⽐如:⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋⻛";林冲,外号豹⼦头; 类型& 引用别名 = 引用对象; 注:这里&跟c语言中取地址符号虽然一样,但作用完全不一样,大家不要混淆...C++引⽤跟其他引⽤(如Java)是有很⼤区别的,除了⽤法,最⼤点,C++引⽤定义后不能改变指向, Java引⽤可以改变指向。...转换为 “int &” // int& rd = d; const int & rd = d; return 0 ; } 临时对像产生条件...• C⾔实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错,且不⽅便调 试,C++设计了inline⽬就是替代C宏函数。...• C++11中引⼊nullptr,nullptr是⼀个特殊关键字,nullptr是⼀种特殊类型字⾯量,它可以转换 成任意其他类型指针类型

    2610

    通俗方式理解动态类型,静态类型类型,弱类型

    引言 今天和一个朋友讨论 C++ 是类型还是弱类型时候,他告诉 C++ 是类型,他和我说因为 C++ 在写时候需要 int,float 等等关键字去定义变量,因此 C++ 是类型告诉他...又尝试去问了另外一个同学 Python 是类型还是弱类型时候,得到竟然是弱类型,就因为定义变量没有 int,float!...另外,由于类型语言一般需要在运行时运行一套类型检查系统,因此类型语言速度一般比弱类型要慢,动态类型也比静态类型慢,因此在上述所说四种语言中执行速度应该是 C > Java > JavaScript...但是类型,静态类型语言写起来往往是最安全。 动态类型与静态类型区别,如何利用好动态类型 静态类型由于在编译期会进行优化,所以一般来说性能是比较高。...优化过程(粗略版本) 我们知道,像 Java / C++ 这样静态类型语言对于对象一般都会有个类模板(一般调用函数时候都是去类模板找)。

    2.2K40

    辨析编程语言四种类型:动静类型与强弱类型

    ,因此 C++ 是类型告诉他 C++ 是弱类型,他竟然还嘲笑不懂基础。...又尝试去问了另外一个同学 Python 是类型还是弱类型时候,得到竟然是弱类型,就因为定义变量没有 int,float!...另外,由于类型语言一般需要在运行时运行一套类型检查系统,因此类型语言速度一般比弱类型要慢,动态类型也比静态类型慢,因此在上述所说四种语言中执行速度应该是 C > Java > JavaScript...但是类型,静态类型语言写起来往往是最安全。 0x03 动态类型与静态类型区别,如何利用好动态类型 静态类型由于在编译期会进行优化,所以一般来说性能是比较高。...优化过程(粗略版本) 我们知道,像 Java / C++ 这样静态类型语言对于对象一般都会有个类模板(一般调用函数时候都是去类模板找)。

    1.4K50

    Java Review (二、Java基本数据类型)

    变量 Java语言是类型(strongly typed)语言,类型包含两方面的含义:①所有的变量必须先声明、后使用;②指定类型变量只能接受类型与之匹配值。...直接使用Unicode值来表示字符型值,格式是'\uXXXX',,其中XXXX代表一个十六进制整数。 Java言中常用转义字符如下。...' 单引号 \u0027 \ 斜线 \u005c char类型变量、值完全可以参与加、减、乘、除等数学运算,也可以比较大小,实际上都是用该字符对应编码参与运算。...在设计 Java 时决定采用 16 位 Unicode 字符集,这样相比较 8 位字符集程序序设计语言有是一个很大改进。...在Java言中,boolean类型数值只能是true或false,不能用0或者非0来代表。其他基本数据类型值也不能转换成boolean类型

    47020

    《财富》AI 革命:为什么要学习深度学习

    很多CEO告诉,他们最害怕是被从未想过是竞争对手竞争对手出其不意地打击,使用他们从未想过技术和商业模式威胁他们生意,让他们落后于时代。...这就是为什么强烈建议你阅读 Roger Parloff 有关深度学习封面故事,了解深度学习正在如何改变我们生活,正如 Roger 所说,它将“很快改变美国企业”以及全球企业。...Roger 指出,Google 翻译已经能“在64种语言中实现口语句子互译,同时能提供103种方言文本翻译,包括宿务、伊博和祖鲁”。...它也是自动驾驶汽车发展关键,也是搜索引擎现在能够分辨出狼和狗照片原因。 要知道,仅仅在五年前,技术还无法实现这样任务,或者实现得很差。这是计算机科学出现 60 年来一次爆发。...百度研究院院长吴恩达曾说‘过去很多500CEO希望他们在互联网策略上思考得更早’,现在认为五年后就会有许多500CEO希望他们在AI策略上更早开始思考。”

    82150

    人类语言遇上编程语言

    然而,了解英语对于学习印欧语系以外语言帮助就没有那么大了——比如印地、阿拉伯或者日语,它们与英语、法语相比有着显著不同。 编程语言学习经历就是一个很好例子。...最开始学习两门编程语言是BASIC和PHP,学完这两种语言之后,再学习其它类似的语言,比如C、C++、C#、MATLAB、Javascript、Ruby和Python就易如掌了,只需要了解它们之间区别就好了...精通Java并不意味着你就明白如何在不调用内置方法情况下对一组数进行排序。算法之于编程语言,就同思维之于自然语言关系一样。编程语言只是一种表达算法手段,一组计算机需要执行指令。...就像在所有的人类语言当中,讲话最基本部分是一致——名词(包括性别与数量),动词,形容词,副词等。但从表象上来看,它们在不同言中都不一样。 对发明新编程语言有着十分浓厚兴趣。...好吧,的确有人做过这样尝试,但是以彻底失败而告终,那就是“世界”。 另一方面,计算机语言发明是用来满足人类与计算机交流需要。

    10.9K60

    JavaScript 编程精解 中文第三版 一、值,类型和运算符

    你可能难以想象,如何在引号之间加引号。 当使用引号(`)引用字符串时,换行符(当你按回车键时获得字符)可能会被包含,而无需转义。...JavaScript 执行此操作方式基于 Unicode 标准。 该标准为你几乎需要每个字符分配一个数字,包括来自希腊,阿拉伯,日语,亚美尼亚,以及其他字符。...1 : 2); // → 2 这个被称为条件运算符(或者有时候只是三元运算符,因为它是该语言中唯一这样运算符)。 问号左侧值“挑选”另外两个值中一个。...自动类型转换 在引言中提到 JavaScript 会尽可能接受几乎所有你给他程序,甚至是那些做些奇怪事情程序。...建议使用三字符比较运算符来防止意外类型转换发生,避免作茧自缚。但如果比较运算符两侧类型是相同,那么使用较短运算符也没有问题。

    1.1K80

    浅谈Python中字符串

    一.Python中如何声明字符串   在Python中声明一个字符串通常有三种方法:在它两边加上那个单引号、双引号或者三引号。   如: ?   ...在这里要注意是,   1)在Python中没有类似C语言中char这种类型字符串,也就是说即使是单个字符也是字符串。   ...下面看一段代码 print '' print u'' print 'python' print u'python' 这段代码运行结果为: ?   ...从运行结果可以看出,如果是中文的话,不采用unicode类型,输出会是乱码。 三.转义字符和原始字符串   同C语言中一样,Python中也有转义字符,用斜杠’\’来表示对后面字符进行转义。   ...如果你编写过Java程序,并且使用过Java正则表达式,你可能会对Java正则表达式深恶痛绝(自己就是),因为稍不注意就会出错,里面有太多转义,而且看起来也很繁琐杂乱。

    1.3K20

    C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第三部分

    记得当匿名方法刚被人介绍出来时候,和其作者聊过,他说你不得不在语言中支持这样功能,但是为什么要这么做,却说不出个所以然来。肯定匿名方法有他实际用处,看我们这篇报道的人也有同样问题吧。...如果你想在一种不支持匿名方法或者 lambda 表达式言中实现一个Where方法,这是不太可能。一个 测试应用到每个元素上, 你知道意思吗?...在java中做这个是非常有效率。但是这种方法使用起来却是非常耗费效率。...这个类型实际上用了 栈分配 或者 内联分配,从内存角度来看这是非常高效。总之 , 我们使用语言语法来支持: nullable 。我们使用问号作为修饰。...Hejlsberg:^_^,绝对不是啦,真的不是这么想。世界上还有很多其他场合更适用于其他语言。在 C# 本质来说, 他是一种类型语言。

    95040

    一些中文编程语言

    这样设计目的是为了保持底层足够大灵活性,使前端代码比较容易地映射到中间语言。...觉得中文编程语言可以按照中文深度这样两种: 本地化其它编程语言。比如上文介绍过“ 丙正正”(题外话:为什么叫“ 丙正正” 呢?因为原语言叫“C++” 嘛……)。 汉语内核语言。...它出现弥补了戈壁在国际编程语言界中一项空白。...实现上,草泥马是一款根据国外同类型语言“Whitespace” 改编(替换关键字)而成全新编程语言,执行时使用“ 草泥马” 不同组合实现不同功能,关键字只有这几个:“ 草”、“ 泥”、“ 马”...是在汉语编程光辉思想指导下,互联网普遍协议与中国国情相结合产物。他名字在中文叫“ 中文版如何做爱”(Chinese How To Make Love)。

    1.9K10

    社交网络分析 R 基础:(二)变量与字符串

    本章会从 R 语言中最基本数据类型开始介绍,在此之后就可以开始 R 语言实践了。对社交网络分析而言,我们在处理字符串上所花费时间要远远大于处理数字时间,因此本章还会介绍常用字符串处理操作。...变量 字符串 字符串创建 特殊字符转义 字符串其他常用操作 变量 R 语言中基本数据类型包括: 整型(integer):整数,如 100; 浮点型(double):小数,如 3.14; 字符串型...R 语言对变量定义并不像类型语言一样需要在定义变量时声明变量数据类型。当进行赋值操作时,就定义了一个新变量。...和大多数语言一样,R 语言中使用斜杠 \ 进行转义操作,常见转义字符有换行符 \n,引号 \" \',以及对斜杠本身进行转义 \\。...第一章留下问题 "a"+"b" 会输出 ab 吗,如何将"a" 和 "b" 拼接成 "ab" ; 2. 截取 "Social Network" 中 "Network"。

    65110

    Kotlin学习笔记(一)-数据类型

    推荐学习资料 Kotlin入门与进阶 Kotlin实战 Kotlin语言中文站 数据类型 1....Char类型java基本一致,这里列出一些常用转义字符 转义字符 含义 \t 制表符 \b 光标后退一个字符 \n 回车 \r 光标回到行首 ' 单引号 " 双引号 \ 斜杠 $ 美元符号,Kotlin...空类型 在Kotlin对函数有更严格要求,如在Java中你可以写这样一个方法: public String getName() { return null; } 这样完全是没问题...length) 定义value是可空类型,但是明确知道它不是null,那么我们可以使用value!!,表示已经确定知道这个值不是null,不要给我报编译错误。...Chlid//安全转失败为null 总结: ◆ Java Style类型转换 val sub: SubClass = parent as SubClass 类似于Java类型转换,失败则抛异常

    74410

    接口vs抽象类区别?如何用普通类模拟抽象类和接口?

    首先,我们来看一下,在 Java 这种编程语言中,我们是如何定义抽象类。 下面这段代码是一个比较典型抽象类使用场景(模板设计模式)。...刚刚我们讲了如何定义抽象类,现在我们再来看一下,在 Java 这种编程语言中,我们如何定义接口。...(等同于Java abstract 关键字),这样,所有的方法都不能有代码实现,并且所有继承这个抽象类子类,都要实现这些方法。...、virtual 这样关键字来定义抽象类,那该如何实现上面的讲到Filter、Logger 设计思路呢?...实际上,对于动态编程语言来说,还有一种对接口支持策略,那就是 duck-typing。我们在上一节课中讲到多态时候也有讲过,你可以再回忆一下。 如何决定该用抽象类还是接口?

    1.2K50
    领券