Java 接口(interface)实现 - 自动初始化器

标签 java interface automation implementation

我想知道是否可以使特定接口(interface)的任何实现在接口(interface)本身初始化时自动执行特定操作。如下所示:

public interface MyInterface {

    public static final ArrayList<MyInterface> IMPLEMENTATIONS = new ArrayList<>();

    public static void init(){
        // Somecode...
    }

    void method1();

    void method2();

}

我希望当接口(interface)初始化时,例如调用 init 方法,那么将创建实现该接口(interface)的每个类的新实例并将其添加到 ArrayList 中。

拥有这样的东西的目的本质上是拥有一个可以启动我编写并希望可用的任何其他程序的单个程序。本质上,它是在计算机启动时启动的,然后可以用来启动我编写的任何其他程序,而不必将每个新程序添加到系统自动启动文件夹中。

这样的事情可能吗?

最佳答案

不要使用接口(interface),而是使用抽象类。此外,在该类中,创建一个接受抽象类作为参数的单参数构造函数。然后在构造函数中,您可以在 ArrayList 中添加该参数。

然后,在主类中,您可以使用 org.reflections创建扩展您的抽象类的所有类的实例。然后调用init方法即可对列表进行操作。

public class MyClass{
  private static final List<MyClass> IMPLEMENTATIONS = new ArrayList<>();
  public MyClass(MyClass myClass){
    IMPLEMENTATIONS.add(myClass);
  }
  public static void init(){
    // Do something with IMPLEMENTATIONS
  }
  abstract void method1();

  abstract void method2();

}

package com.mypackage; 
public class Child extends MyClass{
  public Child(){
    super(this);
  }
  // Implement other abstract methods
}

public class MyMainClass{
  public static void main(String[] args) throws IllegalAccessException, InstantiationException { 
    Reflections reflections = new Reflections("com.mypackage"); 
    Set<Class<? extends MyClass>> classes = reflections.getSubTypesOf(MyClass.class); 
    for (Class<? extends MyClass> aClass : classes){ 
      aClass.newInstance(); 
      }
    MyClass.init();
    }
}

关于Java 接口(interface)实现 - 自动初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460127/

相关文章:

java - 如何解决maven EnforcedBytecodeVersion失败?

java - 如何实现一个继承了接受自身参数的接口(interface)的类?

design-patterns - 保持一切松散耦合和可扩展: Too many layers,的投资返回率太小?

java - 这个 "method linking"对其他组件的(最佳)名称或描述是什么

java - 配置 Gradle 项目以告诉 JAR 在运行时在特定文件夹中查找依赖项工件

java - Tomcat 是否实现或运行 Java Servlet 和 JavaServer Pages (JSP) 规范?

c# - 如何在强类型接口(interface)上引用方法名称

automation - 我如何在 Cypress 中使用软断言

c# - 是否可以为某些方法或参数生成编译器/Resharper 警告?

php - 是否有与 Perl 的 WWW::Mechanize 等效的 PHP?