Я хочу иметь возможность получить список / ArrayList из N новых экземпляров статического метода, унаследованного подклассами, чтобы мне не приходилось переписывать эту одну и ту же функцию во всех подклассах.
Я хочу реализовать это так, чтобы я мог построить вектор, связывающий некоторые А и В. Я пробовал несколько методов, но ни один из них не работал для меня:
public class Parent {
public static List<Parent> getNInstances(int n) {
List<Parent> out = new ArrayList<>();
for (int i = 0; i < n; i++) {
Parent newChildInstance = (Parent) MethodHandles
.lookup()
.lookupClass()
.getConstructor()
.newInstance()
out.add(newChildInstance);
}
}
}
У меня естьполучил метод MethodHandles от здесь , так как я чувствую, что мне нужно, чтобы класс мог вызывать .getConstructor().newInstance()
, что, теоретически, должно решить мою проблему.Тем не менее, это не работает, это дает мне NoSuchMethodException, так как он не может найти конструктор из класса, заданного MethodHandles.lookup().lookupClass()
, по крайней мере, я думаю, именно поэтому.
Вот как я хотел быметод .getNInstances()
для работы.
public class Parent {
public Parent(){ }
public static List<Parent> getNInstances(int n) {
List<Parent> out = new ArrayList<>();
for (int i = 0; i < n; i++) {
Parent newChildInstance = ...
out.add(newChildInstance);
}
}
}
public class A extends Parent {
public A(){ }
}
public class B extends Parent {
public B(){ }
}
public class Main {
public static void main(String[] args) {
List<Parent> total = new ArrayList<>();
total.addAll(A.getNInstances(3));
total.addAll(B.getNInstances(4));
}
}
Здесь итоговое значение должно быть таким, как [a, a, a, b, b, b, b], где a являетсяэкземпляр A и b экземпляр B, но сейчас он просто пуст.