【发布时间】:2020-03-11 12:21:01
【问题描述】:
我有一个同事需要一个方法可以用于两个类。
他决定创建一个由这些类实现的新接口。
接口只有一个方法
default doThis(String parameter)
它没有任何其他接口方法,没有迹象表明该接口会添加其他方法。
我觉得这是对界面的错误使用,应该以不同的方式完成。即,也许一个类具有允许其他类通过使用该对象来使用它的方法。
有这方面经验的人有什么意见可以分享吗?
我可以根据您的 cmets 进行更详细的更新。
更新:
这是代码,问题仍然存在: 这是对默认方法的有效使用,还是应该以另一种方式完成此通用逻辑,例如将保存到首选项的 Utilities 类?
界面:
public interface LogInCookie {
default void mapCookiesToPreferences(String cookie) {
if (cookie.contains(MiscConstants.HEADER_KEY_REFRESH)) {
String refreshToken = cookie.replace(MiscConstants.HEADER_KEY_REFRESH, StringUtils.EMPTY);
SharedPrefUtils.addPreference(SharedPrefConstants.REFRESH_TOKEN, refreshToken);
}
}
}
public class HDAccountActivity extends AbstractActivity implements LogInCookie {
private void mapCookies(List<String> mValue) {
LogInCookie.super.mapCookiesToPreferences(mValue); //ekh!
}
}
public class BaseSplashPage extends AppCompatActivity implements DialogClickedCallBack, LogInCookie {
//method which uses this
private void mapCookiesToPreferences(List<String> headers) {
int firstItemInHeader = 0;
for (String header : headers) {
String mValue = header.substring(firstItemInHeader,header.indexOf(MiscConstants.SEMICOLON));
LogInCookie.super.mapCookiesToPreferences(mValue); //ekh!
}
}
}
【问题讨论】:
-
Java 允许这样做。但我认为,实现这些常用方法的最佳且清晰的方法是 1)创建一个新的抽象类并扩展它 2)使用静态方法创建一个最终类。我个人不建议为此使用界面。
-
@ahsan.dev 在这种情况下,使用接口是一种奇怪的方式。
-
@ahsan.dev 很难得到一个关于所涉及的实体和目的细节很少的问题的明确答案。
-
该方法看起来很容易作为辅助函数放在单独的类中。
-
@ahsan.dev 我认为霍尔格的回答是合理的。我会说这个界面是完全没有必要的,因此它是令人困惑的。
标签: java java-8 interface default