sat*_*isa 1 java static static-methods arraylist static-members
我有以下课程
import java.util.ArrayList;
import java.util.List;
public class TestStaticArrayList {
public static List<String> numberList = new ArrayList<String>();
public static List<String> getArrayValues(){
return numberList;
}
public static void populateArray() {
numberList.add("1");
numberList.add("2");
numberList.add("3");
}
}
Run Code Online (Sandbox Code Playgroud)
上面类中的静态ArrayList是从下面的类调用动态填充的.
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class TestStaticInvokationClass {
public static void main(String[] args) throws Exception {
Class staticKlass = Class
.forName("com.sathish.test.TestStaticArrayList");
staticKlass.getMethod("populateArray", null).invoke(null, null);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图访问下面的类中的静态ArrayList.但它总是为空.
public class StaticArrayListAccessTest {
public static void main(String[] args) throws Exception {
System.out.println(TestStaticArrayList.getArrayValues());
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用
static {
...
}
Run Code Online (Sandbox Code Playgroud)
填充Arraylist它工作正常.我有一个用例,其中ArrayList是动态填充的,这意味着我不能使用静态{..}块.如何在这种情况下访问静态ArrayList.
对此有任何帮助表示赞赏.
静态字段并没有保留其整个程序执行价值,但只在一个执行.静态字段的目的是使值可用而无需获取任何类的实例.只会隐式调用一个main方法,因此列表将被填充和遗忘,或者空列表将从另一个入口点读取.
static { }阻止工作的原因是它们在检索列表之前的某个时间运行,无论入口点如何.
以下内容适用于此原因:
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class TestStaticInvokationClass {
public static void main(String[] args) throws Exception {
Class staticKlass = Class
.forName("com.sathish.test.TestStaticArrayList");
staticKlass.getMethod("populateArray", null).invoke(null, null);
System.out.println(TestStaticArrayList.getArrayValues());
}
}
Run Code Online (Sandbox Code Playgroud)
它将填充ArrayList,然后尝试在同一执行中读取它.
无论如何,你不需要使用反射,因为它在这种情况下更慢,风险更大,更无根据.只需按以下步骤操作:
TestStaticArrayList.populateArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2981 次 |
| 最近记录: |