Collections.unmodifieableListで作ったListは、変更できないListです。setやadd、removeメソッドを呼ぶと、UnsupportedOperationExceptionがスローされます。ただし、コンパイル時にはわかりません。
org.eclipse.collectionsのImmutableListも変更できないリストです。ImmutableListには、setやadd、removeメソッド自体がないので、もしsetやadd、removeを呼んでいれば、コンパイル時にわかります。
もし、ImmutableListを使えるなら、setやadd、removeなどの変更メソッドをうっかり使っていてもコンパイル時にわかるので、unmodifieableListよりもいいかもしれません。
androidで、org.eclipse.collectionsを使うために、app/build.gradleのdependensiesに次の設定をしました。
// app/build.gradle
dependencies {
〜省略〜
implementation 'org.eclipse.collections:eclipse-collections-api:10.0.0'
implementation 'org.eclipse.collections:eclipse-collections:10.0.0'
}
Code language: JavaScript (javascript)
ビルドすると、次のエラーが。
Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'LICENSE-EDL-1.0.txt'
Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'LICENSE-EPL-1.0.txt'
app/build.gradleにandroid.packagingOptionsを追加しました。
// app/build.gradle
android {
〜省略〜
packagingOptions {
exclude 'LICENSE-EDL-1.0.txt'
exclude 'LICENSE-EPL-1.0.txt'
}
}
Code language: JavaScript (javascript)
ビルドすると、次のエラーが。
Caused by: com.android.build.api.transform.TransformException: java.lang.ArrayIndexOutOfBoundsException: 65535
Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535
multiDexEnabledや、implementation 'androidx.multidex:multidex:2.0.1'、MultiDexApplicationなどを試しましたが、効果がありませんでした。
すこしさまよいながら、app/build.gradleにandroid.compileOptionsを追加したところ、さきほどのエラーはなくなり、ビルドできました。
// app/build.gradle
android {
〜省略〜
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Code language: JavaScript (javascript)
まとめると、次のように編集しました。
android {
〜省略〜
packagingOptions {
exclude 'LICENSE-EDL-1.0.txt'
exclude 'LICENSE-EPL-1.0.txt'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
〜省略〜
implementation 'org.eclipse.collections:eclipse-collections-api:10.0.0'
implementation 'org.eclipse.collections:eclipse-collections:10.0.0'
}
Code language: JavaScript (javascript)