在启动时存储抽象int中的值

时间:2015-12-21 20:37:05

标签: java

所以我有一个抽象类,我愿意将子类中的所有值存储在一个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);
}

但它没有用。

2 个答案:

答案 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>();

这听起来对你的问题有用吗?