java implements t_Java泛型——為什么“擴展T”允許而不是“實現T”?

I wonder if there is a special reason in Java for using always "extends" rather than "implements" for defining bounds of typeparameters.

我想知道在Java中是否有一個特殊的原因,因為使用總是“擴展”而不是“實現”來定義類型參數的界限。

Example:

例子:

public interface C {}

public class A{}

is prohibited but

是被禁止的,但

public class A{}

is correct. What is the reason for that?

是正確的。原因是什么?

7 个解决方案

#1

292

There is no semantic difference in the generic constraint language between whether a class 'implements' or 'extends'. The constraint possibilities are 'extends' and 'super' - that is, is this class to operate with assignable to that other one (extends), or is this class assignable from that one (super).

在類“實現”或“擴展”之間的通用約束語言中沒有語義差異。約束的可能性是“擴展”和“超級”——也就是說,這個類是與其他一個(擴展)的賦值操作的,或者是這個類可以從那個(super)中指定的。

#2

27

The answer is in here :

答案就在這里:

To declare a bounded type parameter, list the type parameter's name, followed by the extends keyword, followed by its upper bound […]. Note that, in this context, extends is used in a general sense to mean either extends (as in classes) or implements (as in interfaces).

要聲明一個有界類型參數,請列出類型參數的名稱,然后是擴展關鍵字,然后是它的上界[…]。注意,在這個上下文中,擴展被用於一般意義上,表示擴展(如在類中)或實現(如在接口中)。

So there you have it, it's a bit confusing, and Oracle knows it.

這就有點讓人困惑了,Oracle知道。

#3

14

Probably because for both sides (B and C) only the type is relevant, not the implementation. In your example

可能因為對於雙方(B和C),只有類型是相關的,而不是實現。在你的例子

public class A{}

B can be an interface as well. "extends" is used to define sub-interfaces as well as sub-classes.

B也可以是一個接口。“擴展”用於定義子接口和子類。

interface IntfSub extends IntfSuper {}

class ClzSub extends ClzSuper {}

I usually think of 'Sub extends Super' as 'Sub is like Super, but with additional capabilities', and 'Clz implements Intf' as 'Clz is a realization of Intf'. In your example, this would match: B is like C, but with additional capabilities. The capabilities are relevant here, not the realization.

我通常認為“Sub - extends Super”是“Sub - is like Super,但有附加功能”,“Clz實現Intf”作為“Clz是Intf的實現”。在您的示例中,這將匹配:B類似於C,但具有額外的功能。這里的功能是相關的,而不是實現。

#4

7

Here is a more involved example of where extends is allowed and possibly what you want:

這里有一個更復雜的例子,其中擴展是允許的,也可能是你想要的:

public class A>

公共類A

>。

#5

6

It may be that the base type is a generic parameter, so the actual type may be an interface of a class. Consider:

可能是基類型是一個泛型參數,所以實際類型可能是類的接口。考慮:

class MyGen {

Also from client code perspective interfaces are almost indistinguishable from classes, whereas for subtype it is important.

同樣,從客戶端代碼的角度來看,接口與類幾乎是不可區分的,而對於子類型來說,它是重要的。

#6

2

It's sort of arbitrary which of the terms to use. It could have been either way. Perhaps the language designers thought of "extends" as the most fundamental term, and "implements" as the special case for interfaces.

這是一種任意使用的術語。它本來可以是任何一種方式。也許語言設計者認為“擴展”是最基本的術語,而“實現”是接口的特殊情況。

But I think implements would make slightly more sense. I think that communicates more that the parameter types don't have to be in an inheritance relationship, they can be in any kind of subtype relationship.

但我認為實施會更有意義。我認為,更多的溝通,參數類型不一定要在繼承關系中,它們可以在任何類型的子類型關系中。

The Java Glossary expresses a similar view.

Java術語表表達了類似的觀點。

#7

-2

Because interfaces are just classes, except they don't have attributes or implementations. The only use of the keyword "implements" is to allow a class to inherit multiple interfaces, but not multiple classes, and we can see it in the code. I don't know if they will specify this in the future, but this is not a must.

因為接口只是類,但它們沒有屬性或實現。關鍵字“實現”的唯一用途是允許類繼承多個接口,而不是多個類,我們可以在代碼中看到它。我不知道他們是否會在將來指定這個,但這不是必須的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php调用webservice报错Class 'SoapClient' not found

php调用webservice报错Class SoapClient not found 原文:php调用webservice报错Class SoapClient not found php在调用webservice时,报告如下类似错误: ( ! ) Fatal error: Class SoapClient not found in E:/WebSrv/CI/system/libraries/WebService.php…

stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...

Revit软件技巧合集164套(建筑构件、视图处理、建筑表现、高级技巧)BIM技术在我国建筑行业受到了越来越多的关注,也得到了快速地发展。BIM应用软件也如雨后春笋般的涌现,随着时间的推移,revit在BIM应用中将成为设计利器,而在工程施…

ZooKeeper 保证数据一致性

learn from 从0开始学大数据(极客时间) 文章目录1. 分布式一致性原理2. Paxos 算法与 ZooKeeper 架构1. 分布式一致性原理 CAP 原理认为,一个提供数据服务的分布式系统 无法同时满足 数据一致性(Consistency)、可用性…

python使方法执行10次_Python提升程序性能的七个手段

1. 使用局部变量尽量使用局部变量代替全局变量: 便于维护, 也可以避免不必要的资源浪费使用局部变量替换模块名字空间的变量, 例如: ls os.linesep. 一方面给可以提高程序性能, 局部变量查找速度更快; 另一方面可以采用简短标识符代替冗长的模块变量, 提高可读性.2. 减少函数调…

java sftp mget_总结三种Shell脚本编程中避免SFTP输入密码的方法

最近编程中用到sftp上传文件,且需要用crontab预设定时上传事件。而sftp不同于ftp,没有提供选项如 -i 可以将密码直接编码进程序。使用sftp指令,会自动请求用户输入密码。总结一下可以避免sftp输入密码的三种方式:1. lftp方式LFTP是…

ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!

AD域安装过程安装DNS服务器一路下一步这里选安装到这里DNS服务器安装成功,可以在主页面看到我们安装的角色安装DNS服务器后我们需要重启服务器安装AD域服务新增AD域服务角色一路下一步——安装即可两条安装成功提示,重启服务器角色中选择AD域服务&#x…

IE下及标准浏览器下的图片旋转(二)—— Canvas(2)

文章过长,一篇无法保存 IE下及标准浏览器下的图片旋转(二)—— Canvas(1) 同样,作为最后,我们使用使用jquery也为canvas写个旋转demo: javascript: $(function () { …

大数据技术 思维导图

learn from 从0开始学大数据(极客时间)

python 管理windows客户端_在远程windows客户端上执行python脚本

我正在使用paramiko在远程windows服务器上执行命令。我能够执行dir之类的命令并提取输出,但是执行python脚本似乎失败了。不会引发错误消息。在下面是我的代码片段:def ssh_connect(ip,user,pwd):ssh paramiko.SSHClient()ssh.set_missing_host_key_pol…

日期范围 java_JavaJoDA时间-实现日期范围迭代器

这是一些让你开始的东西。你可能会想一想到底是要包容性还是排他性,等等。import org.joda.time.*;import java.util.*;class LocalDateRange implements Iterable{private final LocalDate start;private final LocalDate end;public LocalDateRange(LocalDate start,LocalDat…

win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...

按了开机按钮后我的台式电脑主机还是没反应,怎么办呢?下面由小编给你做出详细的台式电脑开机主机没反应解方式介绍。(此文主要针对台式电脑做介绍)台式电脑开机主机没反应解方式一:拔掉电源线 然后重复的按开机键5-10下 进行放静电操作 然后再插上电源线…

hadoop 单机伪分布式安装步骤

文章目录1. 安装 Java2. 配置SSH无密码登录3. 下载 hadoop4. 配置环境变量5. 报错处理参考环境 Centos7参考:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.htmlhttps://blog.csdn.net/bingduanlbd/article/details/5187…

Eclipse 为jar包加入 Java Source和Javadoc(如何向Eclipse中导入源码和doc)

: 当我们在MyEclipse中加入Struct,只是引入了jar包,这时使用jar包里面的类,是无法看到源码的,看到的只是这样 是反编译后的一些东西 加入源码 那么如果看到源码呢,就需要导入了 找到这个类对应的jar包,下载…

ppt生成器_小米发布会ppt词云怎么做的

导语在幻灯片中使用文字云或者文字墙是一件非常酷的事情,之前我们看过的很多发布会PPT都有出现文字云设计。利用文字云工具就告别麻烦的排版,让ppt效果更专业,新颖小米发布会ppt 微词云我们先看下几种文字云案例罗振宇《时间的朋友》跨年演讲…

Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...

类的设计中,两个重要结构之二:方法* 方法:描述类应该具有的功能。* 比如:Math类:sqrt()\random()\ ..* Scanner类:nextXxx() ..* Arrays类:sort()\binarySearch()\toString()\equals()\..* * 1.…

钢琴块2电脑版_快陪练教师端电脑版下载_快陪练教师端pc版免费下载[在线教学]...

快陪练教师端电脑版是一款钢琴陪练教师的在线教学软件,快陪练教师端电脑版支持语音互动功能。快陪练教师端电脑版可以帮助老师在线教孩子学习钢琴,软件可以让用户清晰地看到学生弹钢琴时的指法,并及时为其纠正不正确的指法,它引入…

LeetCode 1105. 填充书架(DP)

文章目录1. 题目2. 解题1. 题目 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上。 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0]&#xff0c…

python字符串前面加上序号_简单了解python字符串前面加r,u的含义

这篇文章主要介绍了简单了解python字符串前面加r,u的含义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下u/U:表示unicode字符串不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicod…

java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

一、通过配置文件控制静态资源的热部署在配置文件 application.properties 中添加:#表示从这个默认不触发重启的目录中除去static目录spring.devtools.restart.excludeclasspath:/static/**或者使用:#表示将static目录加入到修改资源会重启的目录中来spr…

判断深度学习模型的稳定性_全自动搭建定制化深度学习模型

EasyDL服务自动化生成与部署EasyDL定制化训练和服务平台基于百度业界领先算法,旨在为用户量身定制业务专属AI模型。通过灵活的配置,用户可以将模型发布为公有云API、设备端离线SDK、本地服务器部署包、软硬一体方案等多种输出方式的AI服务。目前&#xf…