【问题标题】:Java constructor final variable assignmentJava构造函数最终变量赋值
【发布时间】:2010-07-28 02:55:10
【问题描述】:
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 时未设置变量?我在这里想念什么?

【问题讨论】:

    标签: java constructor variables variable-assignment


    【解决方案1】:

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

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

    【讨论】:

    • 啊,有道理。感谢迈克的解释。
    【解决方案2】:

    所以编译器不够聪明。帮帮忙。

    通常参数少的构造函数调用参数多的构造函数,不像你的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 2019-08-19
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 2013-06-20
        相关资源
        最近更新 更多