心得
这星期过得有一点迷茫,又有新的工具加入,使用準则短短的就叙述完毕了,困难的是我不知道什么时候要使用它!不意外的类别可以镶嵌在类别之间而产生了内部类别,方便管理,过去也在一些coding练习的网站中不时有看到Lambda表示式,一直视之为譁众取巧的旁门左道,没想到其实是增加效能的实用方法。原本平舖直叙的程式码经过一连串的物件导向被拆得零零碎碎,随着加强对细节的要求,不断的在一块块的拼图中迷航,增加应付突如期来的变化的扩充性。看着碎裂的程式,我到底写到哪里了呢?要怎么测试,还少哪一块呢?还在练习适应加入了物件导向的世界...
学习笔记
内部类别
包装在外部类别中的类别通常只为了在外部类别中使用, 建议将存取等级设为private, 以免再不同类别中交互使用, 管理紊乱可直接调用外部类别的属性及方法如果需要在外部类别创建前调用, 则可设定为static public class Gambling { Dice a; Dice b; public Gambling(int n){ a = new Dice(n); b = new Dice(n) } private class Dice { //内部类别 int[] dices; public Dice(int n){ dices = new int[n]; } public int sum(){...} } }
匿名内部类别
使用介面时, 可能会为了要实作内部的方法而开新的类别, 但并未被重複利用可以使用匿名内部类别直接实作 (但是系统还是会自动命名产生一个类别)可以直接使用外部属性或方法, 但是调用的外部属性强迫变成final在Java 8 加入Lambda 后, 已不建议使用 public class Gambling { ... private interface Compare{ int diff(Dice a, Dice b); } Compare bigger = new Compare(){ // 匿名内部类别 @Override public int diff(Dice a, Dice b{ return a.sum() - b.sum(); } }
Lambda
当介面中只有一个抽象方法时, 可以用 lambda 来取代匿名内部类别因为只有一个抽象方法, 不需要再描述方法的参数/回传资讯, 直接帮参数命名, 然后撰写实作内容即可 private interface Compare{ //只有一个抽象方法的介面 int diff(Dice a, Dice b); } Compare bigger = new Compare(){ //匿名内部类别 @Override public int diff(Dice a, Dice b { return a.sum() - b.sum(); } }; Compare bigger2 = (a,b) -> {a.sum()-b.sum()}; //lambda