我想知道是否可以使特定接口(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/