当前位置: 首页 > 面试题库 >

Java 8:使用静态方法而非静态util类进行接口

昌乐
2023-03-14
问题内容

当我需要一堆无状态实用程序方法时,Java 8中的最佳实践是什么。有一个 不会 被任何人(即public interface Signaturesand)实现的接口是正确的public interface Environments吗?还是采用旧方法-具有public final class Signaturespublic final class Environments使用私有构造函数|| 更好?枚举?


问题答案:

接口的主要目的是提供一种类型和对该类型的操作词汇(方法)。它们之所以有用且灵活,是因为它们允许多个实现,并且实际上,它们旨在允许在类层次结构中不相关的实现。

问题问,

具有任何人都不会实现的接口是对的吗?

在我看来,这似乎削减了接口的范围。人们将不得不四处查看API,以确定没有实现该接口的类,并且没有该接口的生产者或消费者。可能有人会感到困惑并尝试创建该接口的实现,但是当然他们不会走得太远。尽管所有静态方法都可能具有“实用程序接口”,但这并不像旧的不可构造的最终类习语那样清晰。后者的优点是该类可以
强制执行 任何实例都不能创建。

如果您查看新的Java 8 API,尽管可以在接口上添加静态方法,但仍会使用最终的类惯用法。

接口上的静态方法已用于诸如工厂方法之类的事情来创建这些接口的实例,或者用于在这些接口的所有实例之间具有普遍适用性的实用程序方法。例如,请参阅中的StreamCollector接口java.util.stream。每个人都有静态工厂:Stream.of()Stream.empty(),和Collector.of()

但也请注意,每个都有配套的实用程序类StreamSupportCollectors。这些是纯实用程序类,仅包含静态方法。可以说它们可以合并到相应的接口中,但这会使接口混乱,并使类中包含的方法的关系模糊。例如,StreamSupport包含一系列相关的静态方法,它们都是Spliterator和之间的所有适配器Stream。将它们合并Stream可能会使事情变得混乱。



 类似资料:
  • 问题内容: 到目前为止,我有以下代码: } 当我尝试在末尾设置double 时,出现错误消息“无法对非静态方法进行静态引用”。它说解决方法是也使该方法静态化,但是我的教授告诉我不要将该字段静态化。有一个简单的解决方案我只是想念吗? 问题答案: 静态方法属于该类,非静态方法属于该类的 实例 。 当您从呼叫时,您会收到错误消息,因为它与任何实例都没有关联。 您需要创建该类的实例: 然后,您可以调用实例

  • 问题内容: 我的Android程序中存在旧的“无法对非静态方法进行静态引用”错误,我遇到了一些问题。我正在创建一个掉落游戏(类似于Powder Game),并且创建了一个名为Control的类,以在屏幕底部创建一个带有画笔大小滑块(效果很好)的控件栏,并弹出一个按钮,允许用户选择所选元素的对话框。但是,当我从代码中调用DemoActivity.showDialog(2)时,它将静态引用非静态错误(

  • 我试图在我的程序中使用accessors(Set/Get)方法,当我试图在main方法中使用Get方法时,我得到了以下错误: 无法从Student类型对非静态方法进行静态引用。 我不确定如何着手解决这个问题。我是Java编程的初学者。 以下是具体的问题: 设置/获取方法: 错误行: 任何建议都将不胜感激* 我的代码的完整图片。

  • 我在看一个项目,我发现了一些很奇怪的东西。 现在,我认为唯一的两个优点是,在非静态容器中封装时,命名更加清晰,并且可以传递的参数更少。 但我想知道这是不是一个好主意,通过设计来包装静态类与非静态?如果有的话,还有哪些其他原因?因为我认为创建一个静态并对其进行调用是可以的。但是这个项目特意将所有静态类打包;我也不知道为什么。

  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti