public class Wrapper {
public Wrapper(final String name, final String email) {
_name= name;
_email = email;
}
private static final Card testCard = new Card(_email, _name);
private final static String _name;
private final static String _email;
}
我希望实例化此类提供名称和电子邮件。
我收到“在为(_email,_name)变量定义行之前无法引用变量:
private static final Card testCard = new Card(_email, _name);
我可以通过将声明移到顶部来使其工作,但还有其他方法吗?
由于
答案 0 :(得分:0)
您无法初始化static
字段,因为变量_email
和_name
尚未初始化。您应该在testCard
之后初始化_email
,并初始化_name
。
例如,您可以在构造函数
中执行此操作public Wrapper(final String name, final String email)
{
_name= name;
_email = email;
testCard = new Card(_email, _name);
}
private static Card testCard;
或单独的方法
public static void initialize(String name, String email)
{
_name= name;
_email = email;
testCard = new Card(_email, _name);
}
如果要在构造函数中初始化final
,还应删除static
修饰符。
答案 1 :(得分:0)
根据您的说明,我认为您不想使用static
。
我希望实例化此类提供名称和电子邮件。
这意味着您在创建类的实例时提供名称和电子邮件。但是使用static
表示只有一个名称和一个电子邮件,该类的所有实例共享!除非您的Universe中的每个人都具有相同的名称和相同的电子邮件地址,否则这不是您想要的。所以在static
,_name
和_email
上摆脱testCard
。
此外,在构造函数外部初始化testCard
无法正常工作,因为程序将在new Card(_email, _name)
和_email
初始化之前尝试执行_name
。所以改为
private final Card testCard;
并在构造函数中:
testCard = new Card(_email, _name);
在 _email
和_name
设置之后。
如果你这样做,你应该能够将声明放在任何你想要的地方。 "在变量定义之前无法引用变量"或"非法前瞻性参考"根据{{3}},当你有全局(静态)变量时,问题才会出现。