委託給一個類而不在公共建構函式中提供它

假設你要委託給類, 但不希望在建構函式引數中提供委託的類。相反,你希望私下構造它,使建構函式呼叫者不知道它。起初這似乎是不可能的,因為類委託只允許委託建構函式引數。但是,有一種方法可以做到這一點,如下面的答案所示

class MyTable private constructor(table: Table<Int, Int, Int>) : Table<Int, Int, Int> by table {

    constructor() : this(TreeBasedTable.create()) // or a different type of table if desired

}

有了這個,你可以像這樣呼叫 MyTable 的建構函式:MyTable()MyTable 代表的 Table<Int, Int, Int> 將私下建立。建構函式呼叫者對此一無所知。

這個例子是基於這個 SO 問題