将项目迁移到Java 8时是否存在任何不兼容性问题?

时间:2019-02-14 08:30:18

标签: android lambda java-8

我们有一个android库,供客户在各种项目中使用。大多数项目将JellyBean或KitKat作为最低SDK版本。关键动机是使用从接口到lambda表达式的移动,并在无法做到的地方使用默认接口方法。

我在此处https://developer.android.com/studio/write/java8-support已阅读指南,并且两个功能都没有最低SDK级别。

但是,我想向走过同样道路的人们了解。将库升级到1.8

时,我们应该准备遇到什么问题

谢谢

1 个答案:

答案 0 :(得分:1)

确保 Lambda的方法参考将使您的代码更易于阅读和维护:

Java 7:

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // do some stuff
        }

Java 8:

    button.setOnClickListener((view) -> {
        // do some stuff
    }

改进的类型推断将允许删除大量强制类型转换。例如:

TextView keyNameText = (TextView) findViewById(R.id.key_choice_key_name_text);

将变为:

TextView keyNameText = findViewById(R.id.key_choice_key_name_text);

如果开发人员习惯了经典的Java8,那么乍一看似乎有些奇怪:

虽然您可以在代码中编写lambda表达式(因为它们是Java 8语言功能的一部分),但是您不能使用通常与lambda关联的接口,即java.util.function中的接口,即:

java.util.function.Function
java.util.function.Consumer

因为它们是Java 8语言API的一部分,所以要求API级别为24或更高。因此,例如,如果您碰巧需要java.util.function.Consumer,则必须编写自己的使用者:

public interface MyConsumer<T> {
    void accept(T t);
}

话虽如此,迁移非常简单,在我看来并没有带来任何退步。