読み取り専用集合の不変性を破る方法
4439 ワード
Github Cottlinに開発されたときに好奇心のある場所を考察した場所
概要
コトリンには
セットの祖先
ただし、
打ち破ってみる
パラメータとして
要素を二乗して再格納できるjavaメソッドがあると仮定します.
Javaの
上記の方法では要素を変更できますが、コトリンでは完全に阻止できません.
読み取り専用リストの変更は、次のコードで確認できます.
デフォルトでは、宣言が
Javaコードに
イド・コトリンでは止められないからだ.
使用するjavaコードと統合する際には、これらの要因を十分に考慮する必要があります.
n/a.結論
Javaコードでは、コトリンの読み取り専用コレクションを無視して変更できます.
したがって、javaコードをコードで実行する場合は、特に注意する必要があります.
概要
コトリンには
Collection
の読み取り専用コレクションの祖先がいる.セットの祖先
MutableCollection
クラスを変更できます.ただし、
Collection
を継承する読み取り専用コレクションをjavaメソッドに渡すと、不変性が破壊されます.打ち破ってみる
パラメータとして
List<Integer>
型のリストが得られ、以下に示す.要素を二乗して再格納できるjavaメソッドがあると仮定します.
public class Calculator {
public static void pow(List<Integer> numberList) {
for (int i = 0 ; i < numberList.size() ; i++) {
numberList.set(i, numberList.get(i) * numberList.get(i));
}
}
}
コードに読み取り専用リストを作成し、メソッドのパラメータに移動したらどうなりますか?Javaの
Collection
は基本的に読み取り専用ではないからです.上記の方法では要素を変更できますが、コトリンでは完全に阻止できません.
読み取り専用リストの変更は、次のコードで確認できます.
fun main() {
val numberList = listOf(1, 2, 3, 4, 5)
Calculator.pow(numberList)
numberList.forEach { println(it) }
}
より大きな問題はnull
で発生した.デフォルトでは、宣言が
null
を含まないリストがパラメータとして送信されます.Javaコードに
null
値がランダムに格納されている場合は?non-null
タイプでは、null
の値を決定する奇妙なことが発生する可能性があります.イド・コトリンでは止められないからだ.
使用するjavaコードと統合する際には、これらの要因を十分に考慮する必要があります.
n/a.結論
Javaコードでは、コトリンの読み取り専用コレクションを無視して変更できます.
したがって、javaコードをコードで実行する場合は、特に注意する必要があります.
Reference
この問題について(読み取り専用集合の不変性を破る方法), 我々は、より多くの情報をここで見つけました https://velog.io/@dhwlddjgmanf/읽기-전용-컬렉션의-불변성을-깨뜨리는-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol