我正在尝试从 Eclipse 迁移到 Android Studio。代码可以在 Eclipse 中编译和运行,但不能在 Android Studio 中编译。
有问题的代码将列表从类型转换为子类型列表。它使用使用泛型的方法 mapList。
Android Studio 提示 mapList 的参数与结果类型相同。
是代码还是Android Studio有问题?
public class Fruit {
}
public class Banana extends Fruit {
}
private <D, S extends D> List<D> mapList(List<S> sourceList) {
List<D> result = new ArrayList<D>();
for(S sourceElement : source) {
result.add((D) sourceElement);
}
return result;
}
private void bananaToFruit() {
List<Banana> bananaList = new ArrayList<Banana>();
List<Fruit> fruitList = mapList(bananaList);
}
最佳答案
在 Eclipse 中,您可能正在使用 Eclipse 编译器 (ecj)。 Android Studio 使用 Gradle,它使用 Java 命令行编译器 (javac)。这不是 Android Studio 的问题,而是两个编译器处理泛型的方式不同。我不确定在这种情况下哪个行为正确。
如果您使用普通的 IntelliJ,您可以选择使用 Eclipse 编译器,但如果您使用 Android Studio 和基于 Gradle 的项目,您只能使用 javac。让 Gradle 与 ecj 一起工作是可能的,但我认为没有任何简单的设置;你可能不得不破解 Gradle 本身。
快速搜索会发现比较 javac 和 ecj 的这个问题,其中有一些链接可以更清楚地说明它:
What is the difference between javac and the Eclipse compiler?
关于java - 代码不会在 Android Studio 中编译,但会在 Eclipse 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067083/