Java构造函数最终变量赋值

时间:2010-07-28 02:55:10

标签: java constructor variables variable-assignment

public class User
{
     private final String   _first_name;
     private final String   _last_name;
     private final String   _org_ID;
     private final TimeZone _time_zone;
     private final InternetAddress _email;
     private final Date _last_login;
     private final Date _creation_date;


        public User( final String org_ID,
                             final String username,
                             final String first_name,
                             final String last_name,
                             final List<String> roles,
                             final TimeZone time_zone,
                             final InternetAddress email,
                             final Date last_login,
                             final Date creation_date )
        {
            this( null, org_ID, username, first_name, last_name, roles, time_zone );

            this._email = email;
            this._last_login = last_login;
            this._creation_date = creation_date;
        }

编译器分别为3个变量赋值给出以下错误: “可能已经为变量_email分配了”

编译器是否无法告知在第一个ctor的调用中未设置变量?我在这里错过了什么?

3 个答案:

答案 0 :(得分:3)

要添加irreputable所说的内容,您可能需要重构代码,以便具有更少参数的构造函数使用更多参数调用构造函数,指定合理的默认值或null,视情况而定。< / p>

您收到错误的原因是因为参数较少的构造函数必须处理未明确处理的字段。但是,如果你翻转调用构造函数的方式,你将避免这个问题。

答案 1 :(得分:2)

所以编译器不够聪明。帮助它。

通常,参数较少的构造函数使用更多参数调用构造函数,而不是像你的那样。

答案 2 :(得分:1)

您已将变量声明为final。在最初的分配后,最终变量不能设置为另一个值。即使使用构造函数。