我正在准备将Android应用程序投入生产,因此我启用了大多数棉绒警告。一种特别的警告是广泛传播,但我不明白。

这是警告:


  字段“ loginF”的类型为具体类“ LoginFragment”


这里是描述:


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


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

最佳答案

抱怨是因为您正在将此类(包含loginF字段)与LoginFragment耦合在一起。如果更改LoginFragment,则可能必须更改此类。

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

例如如果您在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配置,而不是使用这个非常严格的配置。

08-28 22:37