Java中的复杂初始化

虽然无聊,还是列出来。

6.1备忘录模式(5.6)中,Memento1的代码

例程 7-2 不变类
package intent.memento;
public final class Memento1{
    private final VirtualState state;//要记忆的状态,
    public Memento1(State state){
        this.state =new VirtualState(state) ;
    }
    State getState(){
        State state = new State(this.state.x,this.state.y);
        return state;
    }
    
    /**
     * 可以使用深克隆技术。
     */
    class VirtualState{
        private int x;
        private int y ; 
        public VirtualState(State state){
            x = state.getX();
            y = state.getY();
        }        
    }
}
程序中的 VirtualState意在提醒程序员,此时保存的状态不是Originator的成员state同一个对象。

实际上,yqj2065是绝对不会设计一个多余的类滴,还是用State好。

于是,有了对应的代码:

package intent.memento;
public final class Memento2{
    private final State state;//要记忆的状态,
    public Memento2(State state){      
        this.state =new State(){{setX(state.getX());setY(state.getY());}};
    }
    State getState(){
        return new State(){{setX(state.getX());setY(state.getY());}};
    }
}
这里的一个无聊的东西
new State(){{setX(state.getX());setY(state.getY());}};
在《编程导论(Java)》p80,也提到了一下,new表达式后面的 {{ ;}}; 
类体外的初始化块。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值