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

Java 在启动时存储抽象int中的值,java,Java,所以我有一个抽象类,我愿意将子类中的所有值存储在一个不可变列表中。这里有一个例子来说明我的意思 public abstract class Test { ... public abstract int getValue(); } 然后是子类 public final class Example extends Test { @Override public int getValue() { return 5; } } 启动时是否有办法将测试#getValue()存储在不可变列表中

所以我有一个抽象类,我愿意将子类中的所有值存储在一个不可变列表中。这里有一个例子来说明我的意思

public abstract class Test {

...

public abstract int getValue();

}
然后是子类

public final class Example extends Test {

@Override
public int getValue() {
return 5;
}

}
启动时是否有办法将测试#getValue()存储在不可变列表中

我试着做一些类似的事情

public abstract class Test {

    public static final ImmutableList<Integer> VALUES = ImmutableList.of();

    public Test() {
        VALUES.add(getValue());
    }

    public abstract int getValue();

}

但是它不起作用。

您可以用如下主要方法编写:

Reflections reflections = new Reflections("com.TestClassExample");    
Set<Class<? extends >> classes = reflections.getSubTypesOf(TestExampleClass.class);
Reflections=newreflections(“com.TestClassExample”);
设置使用一个。可以创建一个静态块,该块将在类加载时执行:

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() {
    // ...
  }
}
包foo.bar.baz;
导入java.util.*;
公开课考试{
静止的{
int MY_int=5;
List mylist=new ArrayList();
add(新整数(MY_INT));
}
公开考试(){
// ...
}
}

是否只存储一个元素?尝试Collections.singletonList()或从google collection libImmutableList@gauee是的,只是一个int。我已经添加了一个我尝试做的例子。在初始化阶段之后,你们不能改变不可变对象的状态。私有ImmutableList build=ImmutableList.builder().add(“5”).build();这些值应该直接存储在抽象类的实现中。另一种方法是使用这些值创建构造函数,并始终返回此类列表的副本。这在第二种方法中可能会有所帮助:@gauee是的,我知道,您可以执行
private ImmutableList build=ImmutableList.of(“5”)以避免额外的字符。如果我有一张单子。如何做到这一点?不,抽象方法不是静态的,所以这不起作用。这不是模块化的,必须为每个子类这样做会让我的生活更艰难。@Jason Qlueses编辑的答案有用吗?我可以帮你编码。让我知道。
private static List<Integer> immutableList = new ArrayList<Integer>();
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() {
    // ...
  }
}