当前位置: 首页 > 知识库问答 >
问题:

为什么Java8不允许接口成员是私有的?[副本]

邵崇凛
2023-03-14

虽然有些人曾经问过这个问题,但那是在Java8发布之前。

以前,静态成员是不允许的,因为实现细节不能在接口中定义。这也是为什么任何东西都不应该是私有的,因为接口的实现者需要提供实现细节。

Java8改变了这种情况,不是吗?默认方法定义实现细节,静态方法也是如此。那么,为什么仍然不允许这样做呢?

共有1个答案

裴金鑫
2023-03-14

因为执行中的时间限制。

私有方法最初在spec中,但在一封名为“Some Purlbacks”的电子邮件中,它们被删除了,这封电子邮件是Brian Goetz在Java8开发时发给lambda-spec-experts邮件列表的。

我们希望从JSR-335特性计划中收回两个小特性:

  • 接口中的私有方法
  • 包-专用可见性的“包修饰符”

主要原因是资源...

 类似资料:
  • 为什么Java不允许在接口中使用私有成员?有什么特别的原因吗?

  • 如果我有一个封装两个成员的结构,并基于另一个成员更新其中一个,那么只要我这样做就可以了: 也就是说,当我直接提到self时。b 。但当我将do\u stuff()更改为以下内容时: 编译器抱怨:<代码>无法将`*self`借用为不可变,因为` self `。a `也被借用为可变的。 如果我需要执行比返回成员更复杂的操作来获取a.do\u something()的参数,该怎么办?我必须创建一个按值返

  • 为什么Java 8不允许在接口中添加toString()的默认实现? 这是错误消息:

  • 如果我有一些琐碎的东西,比如(为了澄清,我并不是说这是一个好的实现,只是一个演示成员函数部分模板专门化失败的示例): 我无法通过执行以下操作来专门化每个功能: 不幸的是,C标准不允许: 14.5.5.31、类模板局部特化成员的模板参数列表应与类模板局部特化的模板参数列表匹配类模板局部特化成员的模板参数列表应与类模板局部特化的模板参数列表匹配。 因此,唯一的解决方案(据我所知)是使用类型特征或用样板

  • 问题内容: 我正在研究TypeScript中私有成员的实现,但我感到有些困惑。Intellisense不允许访问私有成员,但是在纯JavaScript中,仅此而已。这使我认为TS无法正确实现私有成员。有什么想法吗? 问题答案: 就像类型检查一样,成员的隐私仅在编译器中强制执行。 私有属性被实现为常规属性,并且不允许类外的代码对其进行访问。 为了使某些东西真正成为类的私有对象,它不能成为该类的成员,

  • 下面的泛型代码无法编译,我可以理解原因:这是为了阻止可能不兼容的类型添加到集合中: 然而,我可以对数组做同样的事情,并且不会得到编译器错误。当我运行它时,我会得到一个 为什么编译器不阻止我上传数组,因为它会麻烦地阻止我上传泛型?