java - 代码不会在 Android Studio 中编译,但会在 Eclipse 中编译

标签 java android eclipse android-studio

我正在尝试从 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/

相关文章:

java - 出现错误: Execution failed for task app:transformClassesWithMultidexlistForDebug

android - 以编程方式加载 Android SDK 位置

java - eclipse中的ant调试

java - 使用 saveOrUpdate hibernate : Random Exceptions and record not updated during session flush,

android - 如何调用插页式广告第二次

java - 在我最小化 JFrame 或调整其大小之前,JMenu 不会出现

php - Android在for循环中调用php

java - Eclipse 自动完成功能不适用于 lambda 和类型

java - 无法解析导入javax.mail

java - `public class` 和只是 `class` 有什么区别?