字段'myField'的类型是具体类'MyClass'

时间:2015-07-13 21:44:09

标签: java android compiler-warnings android-lint

我正准备我的Android应用程序进行生产,因此我启用了大多数lint警告。一个特别的警告是广泛传播,但我不明白。

这是警告:

  

字段'loginF'的类型是具体类'LoginFragment'

以下是描述:

  

报告其类型被声明为具体类的任何实例字段,而不是接口。此类声明可能表示抽象失败,并可能使测试更加困难。此检查不会报告其类来自系统或第三方库的声明。

任何详细说明都将不胜感激 注意:我使用的IDE是“Android Studio”。

1 个答案:

答案 0 :(得分:2)

它抱怨,因为你将这个类(包含loginF字段)与LoginFragment耦合;如果更改LoginFragment,则可能需要更改此类。

或者,查看此类中LoginFragment上使用的方法。它们是否共同形成了一些您可以在界面中指定的行为?

e.g。如果您在loginF上调用的唯一方法是initiateLogin(),那么您可以拥有:

interface Login {
    void initiateLogin();
}

class LoginFragment extends Fragment implements Login {
    @Override
    public void initiateLogin() {
        // do login
    }
}

这样您就不会声明LoginFragment loginF = new LoginFragment();,而是使用Login login = new LoginFragment()

然后,只要保留LoginFragment方法,您就可以更改initiateLogin(),甚至可以将new LoginFragment()替换为Login的任何其他实现,这可能对模拟有用在测试中。

一个非常人为的例子。我建议使用默认的lint配置,而不是这个超级严格的配置。