The Key to final data

// FinalData.java

package com.hp.ci.mgmt.perm.hal.localization;

import java.util.Random;

class Value
{
    int i;

    public Value(final int i)
    {
        this.i = i;
    }

}

/**
 *
 */
public class FinalData
{
    private static Random rand = new Random(47);

    private String id;

    public FinalData(final String id)
    {
        this.id = id;
    }

    // Can be compile-time contants
    private final int valueOne = 9;
    private static final int VALUE_TWO = 99;
    //Typical public constant
    public static final int VALUE_THREE = 39;
    //Cannot be compile-time constants
    private final int i4 = rand.nextInt(20);
    static final int INT_5 = rand.nextInt(20);

    private Value v1 = new Value(11);
    private final Value v2 = new Value(22);
    private static final Value VAL_3 = new Value(33);

    //Arrays:
    private final int[] a = {
            1, 2, 3, 4, 5, 6
    };

    @Override
    public String toString()
    {
        return id + ": " + "i4 = " + i4 + ", INT_5 = " + INT_5;
    }

    /**
     * @param args
     */
    public static void main(final String[] args)
    {
        final FinalData fd1 = new FinalData("fd1");
        //! fd1.valueOne++; // Error: can't change value
        fd1.v2.i++; // Object isn't contant
        fd1.v1 = new Value(9); //Ok -- not final
        for (int i = 0; i < fd1.a.length; i++)
        {
            fd1.a[i]++; //Object isn't constant!
        }

        //! fd1.v2 = new Value(0); //Error: Can't
        //! fd1.VAL_3 = new Value(1); // change reference
        //! fd1.a = new int[3];
        System.out.println(fd1 + "\nCreating new FinalData");
        final FinalData fd2 = new FinalData("fd2");

        System.out.println(fd1);
        System.out.println(fd2);
    }

}

 -- Copy From Thinking in Java Fourth Edition

posted @ 2016-01-21 13:36  Hypocrite  阅读(224)  评论(0编辑  收藏  举报