用于匿名內(nèi)部類的泛型

匿名內(nèi)部類

泛型還可以使用于內(nèi)部類和匿名內(nèi)部類。

class Customer {
    private static long counter = 1;
    private final long id = counter++;

    private Customer() {

    }

    public String toString() {
        return "Customer " + id;
    }

    public static Generator<Customer> generator() {
        return new Generator<Customer>() {
            @Override
            public Customer next() {
                return new Customer();
            }
        };
    }
}

class Teller {
    private static long counter = 1;
    private final long id = counter++;

    private Teller() {
    }

    public String toString() {
        return "Teller " + id;
    }

    public static Generator<Teller> generator = new Generator<Teller>() {
        @Override
        public Teller next() {
            return new Teller();
        }
    };
}


public class BankTeller {
    public static void serve(Teller t, Customer c) {
        System.out.println(t + " serves " + c);
    }

    public static void main(String[] args) {
        Random rand = new Random(47);
        Queue<Customer> line = new LinkedList<>();
        Generators.fill(line, Customer.generator(), 15);
        List<Teller> tellers = new ArrayList<>();
        Generators.fill(tellers, Teller.generator, 4);
        for (Customer c : line) {
            serve(tellers.get(rand.nextInt(tellers.size())), c);
        }
    }
}
// Outputs
Teller 3 serves Customer 1
Teller 2 serves Customer 2
Teller 3 serves Customer 3
Teller 1 serves Customer 4
Teller 1 serves Customer 5
Teller 3 serves Customer 6
Teller 1 serves Customer 7
Teller 2 serves Customer 8
Teller 3 serves Customer 9
Teller 3 serves Customer 10
Teller 2 serves Customer 11
Teller 4 serves Customer 12
Teller 2 serves Customer 13
Teller 1 serves Customer 14
Teller 1 serves Customer 15

上面的CustomerTeller都通過使用匿名內(nèi)部類實(shí)現(xiàn)了Generator接口,并且他們都只有private的構(gòu)造器,這就意味著要想創(chuàng)建這兩個(gè)類的對(duì)象,必須使用generator方法。其中,Customer類的generator()方法每次調(diào)用都會(huì)返回一個(gè)新的Generator<Customer>對(duì)象,但我們其實(shí)并不需要多個(gè)Generator對(duì)象。這時(shí),就可以像Teller類一樣,只創(chuàng)建一個(gè)publicgenerator對(duì)象。在main方法中,這兩種創(chuàng)建Generator對(duì)象的方法在fill()中都用到了。

由于Customer中的generator()方法,以及Teller中的Generator對(duì)象都聲明成static,所以它們都無法作為接口的一部分,因此不能用接口這種特定的慣用法來泛化這兩者。盡管如此,它們?cè)?code>fill()方法中都工作得很好。(//TODO 看不懂)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 泛型實(shí)現(xiàn)了參數(shù)化類型的概念,使代碼應(yīng)用于 多種類型。參數(shù)化類型,顧名思義就是將類型由原來的具體的類型參數(shù)化,類似于...
    zlb閱讀 334評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評(píng)論 18 399
  • F54趙毅 簡(jiǎn)介: 哈特教育創(chuàng)始人 DISC聯(lián)合創(chuàng)始人 8年資深銷售及4年運(yùn)營(yíng)管理經(jīng)驗(yàn) 2010年畢業(yè)于南寧學(xué)院,...
    哈特咨詢趙老師閱讀 1,068評(píng)論 2 5
  • 周一營(yíng)業(yè)到18:30 周二營(yíng)業(yè)到18:30 周三營(yíng)業(yè)到18:30 周四營(yíng)業(yè)到18:30 周五營(yíng)業(yè)至21:00 周六...
    良人向生閱讀 827評(píng)論 0 0
  • 遠(yuǎn)遠(yuǎn)望去,一座拱形的石橋,那是煙雨中的月亮。 去年春天的周末,我沿著青石小路,踏上這座月亮橋,我看見有一個(gè)村子半臥...
    周老師語文工作室閱讀 400評(píng)論 3 3