2016-12-02 83 views
1

爲什麼Kotlin不允許創建與Java不同的私有內部類的公共實例?在Kotlin中創建私有內部類的公共實例

作品中的Java:

public class Test { 
    public A a = new A(); 

    private class A { 
    } 
} 

在科特林無效(A類必須public):

class Test { 
    var a = A() 
// ^ 
// 'public' property exposes its private type 'A' 

    private inner class A 
} 

回答

3

我會假設,因爲沒有一個真正的情況下它似乎是正確的做法。訪問屬性a的任何代碼都無法訪問其類型。你不能將它分配給一個變量。 Test.A myVarTest類以外的聲明將會出錯。由於不允許,代碼將被迫更加一致。更好的問題是Java爲什麼會允許它?其他語言,如swift,具有相同的限制。

2

https://kotlinlang.org/docs/reference/visibility-modifiers.html#classes-and-interfaces

狀態:

注意的Java用戶:外類不看它的內部類的私有成員在科特林。

爲了您的用例,您可以使用Nested Classes

private inner classes你只能夠訪問外部類的成員。

我認爲kotlin團隊是這樣實施的,所以可以將private inner classes中的成員的範圍縮小爲只能在inner class之內訪問。我認爲這在Java中是不可能的。