alibaba / freeline

A super fast build tool for Android, an alternative to Instant Run
https://www.freelinebuild.com/
BSD 3-Clause "New" or "Revised" License
5.48k stars 623 forks source link

错误: 从内部类中访问本地变量view; 需要被声明为最终类型 #122

Closed shuifengYu closed 8 years ago

shuifengYu commented 8 years ago

错误: 从内部类中访问本地变量view; 需要被声明为最终类型 float radius = view.getHeight() / 2 - radiusMargin;


以上是错误日志,有很多这样类似的日志,上下文是类似这样的:

public void fun(){
        View view=new View(mContext);
        contentView.post(new Runnable(){
            @Override
            public void run() {
                float radius = view.getHeight() / 2;
            }
        });
    }

以上编译器能过,但freeline编译会报错不让通过,是不是判断类型的时候过于严苛了?

lomanyong commented 8 years ago

@shuifengYu 内部类访问外部类的临时变量原本就要声明final吧?就算在IDE中编写,IDE也会给提示的。最好还是将该成员变量声明为final,这个是个正常的做法,不算是严苛吧。

shuifengYu commented 8 years ago

android studio中没有提示的,只有基本类型会提示且报错:

aa
lomanyong commented 8 years ago

@shuifengYu 我这边提示错误了:

会不会是因为你使用的Java Sdk是1.8的问题呢?freeline默认使用target 1.7的jdk来编译。

shuifengYu commented 8 years ago

果然,就是说freeline的jdk升级到1.8就没这个问题了吧,顺便问下有打算什么时候支持java8或者lambda吗

lomanyong commented 8 years ago

@shuifengYu 有打算。预计这个月支持,不过目前主要还是以加强稳定性为主。我们会尽快支持Java8 + lambda的。

shuifengYu commented 8 years ago

恩,希望能越来越稳定,现在用起来除了还有些小问题需要磨合,确实极大的提高了工作效率

lomanyong commented 8 years ago

@shuifengYu 好的~多谢支持