我正在准备将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配置,而不是使用这个非常严格的配置。