gpt4 book ai didi

java - 字段类型 'myField' 是具体类 'MyClass'

转载 作者:行者123 更新时间:2023-11-30 08:49:28 24 4
gpt4 key购买 nike

我正在为生产准备我的 android 应用程序,所以我启用了大多数 lint 警告。一个特别的警告广为流传,但我不明白。

这里是警告:

Type of field 'loginF' is concrete class 'LoginFragment'

这是描述:

Reports any instance fields whose type is declared to be a concrete class, rather than an interface. Such declarations may represent a failure of abstraction, and may make testing more difficult. Declarations whose classes come from system or third-party libraries will not be reported by this inspection.

如有任何详细说明,我们将不胜感激。
注意:我使用的 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 配置,而不是这个 super 严格的配置。

关于java - 字段类型 'myField' 是具体类 'MyClass',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31394042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com