所以我有一个抽象类,我愿意将子类中的所有值存储在一个ImmutableList中。这是我的意思的一个例子
public abstract class Test {
...
public abstract int getValue();
}
然后是子类
public final class Example extends Test {
@Override
public int getValue() {
return 5;
}
}
有没有办法在启动时将Test#getValue()存储在ImmutableList中?
我尝试过像
这样的事情public abstract class Test {
public static final ImmutableList<Integer> VALUES = ImmutableList.of();
public Test() {
VALUES.add(getValue());
}
public abstract int getValue();
}
然后打印出VALUES列表中的值。
public static void main(String[] args) {
Test.LIST.forEach(System.out::println);
}
但它没有用。
答案 0 :(得分:1)
使用initializer block。可以创建一个静态块,它将在类加载时执行:
package foo.bar.baz;
import java.util.*;
public class Test {
static {
int MY_INT = 5;
List<Object> mylist = new ArrayList<Object>();
mylist.add(new Integer(MY_INT));
}
public Test() {
// ...
}
}
答案 1 :(得分:0)
你可以用这样的主方法写一下:
Reflections reflections = new Reflections("com.TestClassExample");
Set<Class<? extends >> classes = reflections.getSubTypesOf(TestExampleClass.class);
获取类的所有名称,然后循环遍历所有类,然后将其强制转换为测试类,然后在这样的变量中动态使用和存储值。
private static List<Integer> immutableList = new ArrayList<Integer>();
这听起来对你的问题有用吗?