public class Closure { public String version=""; public static void main(String[] args) { Closure c1=new Closure(); c1.version="1.0"; Moment m1=c1.getMoment(); System.out.println(m1.getVersion()); c1.version="2.0"; Moment m2=c1.getMoment(); System.out.println(m2.getVersion()); } public Moment getMoment(){ return new Moment() { @Override public String getVersion() { return version; } }; } } interface Moment{ String getVersion(); }
以上分别输出1.0 2.0,说明m1,m2记住了当时的状态,也就是说每次声明Moment对象的时候,编译器会把相关的值拷贝副本,放到对象的私有变量里。
public class keli { public calculator changeCalc(final initialize init, final int num) { return new calculator() { @Override public int cal(int addend) { return init.init(num) + addend; } }; } public static void main(String[] args) { initialize init1 = new initialize() { @Override public int init(int num) { num = num * 10; return num; } }; initialize init2 = new init2(); calculator clac1=new keli().changeCalc(init1,3); calculator clac2=new keli().changeCalc(init2,3); System.out.println(clac1.cal(2)); System.out.println(clac2.cal(2)); } } class init2 implements initialize{ @Override public int init(int num) { num = num / 10; return num; } } interface calculator { int cal(int num); } interface initialize { int init(int num); }
public class currying3 implements Proto { public List<String> paramList = null; public currying3(List<String> paramList) { this.paramList = paramList; } @Override public List<String> getList() { return this.paramList; } public static void main(String[] args) { List<String> paramList = new ArrayList<String>(); Proto p = new currying3(paramList); p.handle("aa").handle("bb").handle("cc").handle(); System.out.println("end....."); List<String> paramList1 = new ArrayList<String>(); Proto p1 = new currying3(paramList1); p1.handle("dd").handle("ee").handle("ff").handle(); System.out.println("end....."); } } interface Proto { public List<String> getList(); default Proto handle(String... param) { List<String> paramList=this.getList(); if (param == null || param.length <= 0) { for (String Str : paramList) { System.out.println(Str); } return null; } else { for (String Str : param) { paramList.add(Str); } return this; } } }
原文:http://www.cnblogs.com/wanglao/p/6506959.html