java - 在自己的接口(interface)中初始化类

标签 java design-patterns

我查看了一些代码并注意到了这样的结构:

public interface TestIntrerface {
  void doFirst();
  void doSecond();
}

public interface Interface1 extends TestIntrerface {
  Interface1 inter = new FirstClass();
}

public interface Interface2 extends TestIntrerface {
  Interface2 intr = new SecondClass();
}


public class FirstClass implements Interface1 {
  public void doFirst() {
    //...
  }

   public void doSecond() {
      //...
   }
}

public class SecondClass implements Interface2 {
   public void doFirst() {
      //...
   }

  public void doSecond() {
      //...
  }
}


public class Test {
  public static void main(String[] args) {
    Interface1.inter.doFirst();
    Interface2.intr.doSecond();
  }
}

它对我来说有潜力,但我以前从未见过这种构造。 两个问题:

  1. 这个模式的名称是什么(是那个模式(?))吗?
  2. 在现实世界中使用它是一个很好的做法吗?

最佳答案

这是两个 constant declarations 的示例接口(interface)中的 interintr。这不是一种模式,我不会说这是一个好的做法。

  1. Interface1Interface2 没有意义:它们不补充/实现它们扩展的接口(interface)。基本上,它们是可以在其他地方定义的常量的持有者。请注意,常量绑定(bind)到特定的类,而接口(interface)则具有更广泛的含义,提供通用接口(interface)。

  2. 名称 interintr 很糟糕,它们无法说明这些常量代表什么/做什么。

一个更合理的例子看起来像

interface TestInterface {
  void doFirst();
  void doSecond();

  TestInterface EMPTY = new TestInterface() {
    @Override
    public void doFirst() {}
    @Override
    public void doSecond() {}
  };

}

其中 EMPTY 表明它是接口(interface)的默认(且空)实现。请注意,我将其称为 EMPTY(而不是 empty),因为它始终是 public static final 字段。

关于java - 在自己的接口(interface)中初始化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258678/

相关文章:

java - JNA - EnumProcessModules() 不返回所有 DLL?

java - Vaadin - Micronaut 集成

c# - 父子类关系设计模式

sql - 您应该使用单表继承还是在一个 View 中联合使用多个表?

java - 如何构建我自己的应用程序设置

java - 在java中编辑图像

java - 在 checkstyle 中使用 ID 抑制

java - MySQL语法错误异常 : Unknown column xxx in 'field list'

design-patterns - 是否可以在 Haskell 中为排序二叉树创建 Functor 实例?

c++ - 我的组件需要访问者吗?