2014-06-21 15 views
0
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; 
    } 

我想实例化这个类提供一个名称和一个电子邮件。定义之前无法引用变量 - Java

我收到“不能引用变量它是为在线(_EMAIL,_name)变量定义之前:

private static final Card testCard = new Card(_email, _name); 

我可以把它通过移动声明顶端的工作,但没有任何其他方法是什么?

感谢

+0

你认为你的代码有什么作用?你知道“静态”是什么吗? –

+1

@SotiriosDelimanolis鉴于OP正在尝试修改这些值,我个人更倾向于“final”。 =/ – jpmc26

+0

我不明白你是如何通过移动声明来实现它的。当我尝试时遇到了其他一些问题。 – ajb

回答

0

根据您的描述,我认为您不想使用static

我想实例化这个类提供一个名称和一个电子邮件。

这意味着您在创建该类的实例时提供名称和电子邮件。但使用static意味着只有一个名称和一个电子邮件,即全部实例类共享!除非你的宇宙中的每个人都有相同的姓名和相同的电子邮件地址,否则这不是你想要的。所以摆脱static_name,_email,和testCard

此外,初始化testCard构造外将无法正常工作,因为程序会尝试做new Card(_email, _name)_email_name已被初始化。所以,改变以

private final Card testCard; 

,并在构造函数中:

testCard = new Card(_email, _name); 

_email_name已设置。

如果你这样做,你应该能够把声明放在任何你想要的地方。根据this question,只有具有全局(静态)变量时才会出现“无法在变量定义之前引用变量”或“非法前向引用”问题。

0

您水湿初始化static字段,因为变量_email_name尚未初始化。您应该后初始化和_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

相关问题