我正准备我的Android应用程序进行生产,因此我启用了大多数lint警告。一个特别的警告是广泛传播,但我不明白。
这是警告:
字段'loginF'的类型是具体类'LoginFragment'
以下是描述:
报告其类型被声明为具体类的任何实例字段,而不是接口。此类声明可能表示抽象失败,并可能使测试更加困难。此检查不会报告其类来自系统或第三方库的声明。
任何详细说明都将不胜感激 注意:我使用的IDE是“Android Studio”。
答案 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配置,而不是这个超级严格的配置。