Java代码。没有错误:
public class Test {
public void getList() {
List<Parent> list = join(
Parent.Child1.values(),
Parent.Child2.values()
);
}
public interface Parent {
enum Child1 implements Parent {}
enum Child2 implements Parent {}
}
public <T> List<T> join(T[]... collections) {
ArrayList<T> result = new ArrayList<>();
for (T[] collection : collections) {
result.addAll(Arrays.asList(collection));
}
return result;
}
}
科特林代码。类型不匹配错误
class Test2 {
val list: Unit
get() {
val list = join<Parent>(
Parent.Child1.values(),
Parent.Child2.values()
)
}
interface Parent {
enum class Child1 : Parent
enum class Child2 : Parent
}
fun <T> join(vararg collections: Array<T>): List<T> {
val result = ArrayList<T>()
for (collection in collections) {
result.addAll(collection.toList())
}
return result
}
}
请帮助我,我如何修复此错误?
不知道如何解决它
我认为这是Java数组类型实现设计中的一个错误,允许您这样做。这使得<code>T</code>(在本例中为父级)被放入只能接受<code>T</code<的某个子类型的数组中的可能性很大,这将在运行时引发异常。
Kotlin 对泛型更加严格,防止您可能做出的任何意外假设可能导致运行时崩溃。
将函数参数的类型更改为Array
fun <T> join(vararg collections: Array<out T>): List<T> {
//...