[英]Pass argument to a static constructor in Java?
我正在尝试使用参数初始化静态类,然后在该类中运行更多静态代码。
我知道static
块,但它似乎不能采取任何参数。
有没有办法将参数传递给静态构造函数?
如果没有,使用参数初始化Static类的推荐技术是什么?
编辑:我理解的静态类是一个无法实例化的类(在c#中它们被称为静态类,如果Java对它们有不同的术语,很抱歉没有意识到它) - 它通过它的类名来访问而不是对象名称。
我想要实现的(非常简化)是一个类,它接收字典作为String,解析它,并让方法像GetRandomEntry
一样操纵它。
这是我的代码的详细摘录:
public class QuestionsRepository {
private static Map<String,String[]> easyDefinitions = new HashMap<String,String[]>();
//...
static
{
// need to receive and parse dictionary here
}
//...
获取代码片段的相关部分绝非易事,希望我明智地选择(:
另一个可能相关的细节 - 通常是我的#程序员。 刚开始学习Java。
谢谢。
我认为你需要根据一些输入初始化类的静态字段。 您可以通过调用另一个类的静态方法以下列方式执行此操作:
class ClassToInitialize {
static {
staticField = ParamPassClass.getParameter();
}
private static String staticField;
ClassToInitialize() {
System.out.println("This is the parameter: " + staticField);
}
}
class ParamPassClass {
private static String parameter;
static String getParameter() {
return parameter;
}
static void setParameter(String parameter) {
ParamPassClass.parameter = parameter;
}
}
class Main {
public static void main(String args[]) {
ParamPassClass.setParameter("Test param");
new ClassToInitialize();
}
}
Java没有静态构造函数。 它只有静态初始化器,静态初始化器不带任何参数。 它是在第一次加载类时执行的,并且无法自己调用它。
您需要使用实际对象,或者添加一些配置类的方法(例如,通过静态方法)。
你应该提到带有静态限定符的成员类,否则就没有静态类这样的东西在这里你可以找到在这个上下文中使用'static'这个词的解释。
现在你应该只调用它的构造函数并传递你想要的所有参数,你对静态成员类的唯一限制是它不能引用它的外部类的非静态字段,它类似于类上的静态方法不能引用类的非静态字段。
我不明白为什么你在这里提到一个静态初始化块,请你澄清一下? 还要注意,在java中没有静态构造函数这样的东西....
希望这可以帮助
您可以使用枚举来初始化具有这样的字符串参数的单例
import java.util.*;
class Data {
static Map<String,String[]> easyDefinitions = new HashMap<String,String[]>();
}
public enum QuestionsRepository
{
repository("primary=red,green,blue;secondary=cyan,yellow,magenta");
QuestionsRepository(String dictionary) {
String[] rules = dictionary.split(";");
for (String rule:rules) {
String[] keyValuePair = rule.split("=",2);
Data.easyDefinitions.put(keyValuePair[0],keyValuePair[1].split(","));
}
}
}
你可以有一个静态方法public static void setUp(Arg1 arg1, Arg2 arg2...)
,它设置你所有的static
字段,并在你的程序启动时调用它。
您必须确保只调用此方法一次[或仅在您要重置这些字段时]
不能将参数直接传递给静态初始化( JLS:静态初始化器 )。
如果您可以分享有关您的目标的更多信息,那将是很好的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.