gpt4 book ai didi

java - 正确使用界面中的default关键字

转载 作者:行者123 更新时间:2023-12-02 10:46:59 26 4
gpt4 key购买 nike

我有一位同事需要一种可供两个类使用的方法。

他决定创建一个新的接口(interface)来由这些类实现。

该接口(interface)只有一个方法默认 doThis(字符串参数)

它没有任何其他接口(interface)方法,没有迹象表明会向该接口(interface)添加其他方法。

我认为这是对界面的错误使用,应该以不同的方式完成。即,也许一个类具有允许其他类通过使用该对象来使用它的方法。

有这方面经验的 friend 可以分享一下吗?

我可以根据您的评论进行更详细的更新。

更新:

这是代码,问题仍然存在:这是默认方法的有效使用还是应该以另一种方式完成此通用逻辑,例如保存到首选项的实用程序类?

界面:

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!
}
}

}

最佳答案

接口(interface)中的default方法没有定义其他方法,无法对实现类的实例做太多有用的事情。它只能使用从java.lang.Object继承的方法,这些方法不太可能携带与接口(interface)相关的语义。

如果代码根本不使用 this 上的实例方法,换句话说,完全独立于 this 实例,则应将其设为 static,将包含类更改为不可实例化的class类型,即

final class SomeUtilClass {
static void doThis(String parameter) {
// ...
}

private SomeUtilClass() {} //no instances
}

并在使用此方法的类中使用import static packageof.SomeUtilClass.doThis;

这样,所有这些类都可以调用像 doThis(…) 这样的方法,而无需限定类型名称,也不需要误导性的类型层次结构。

当方法实际使用 this 实例时,如上所述,只能是从 java.lang.Object 继承的方法,类型继承< em>可能是有道理的。由于这种情况不太可能发生,您可能仍然认为类型层次结构具有误导性,并将代码重写为

final class SomeUtilClass {
static void doThis(Object firstParameter, String parameter) {
// ...
}

private SomeUtilClass() {} //no instances
}

使用firstParameter而不是this,它可以像doThis(this, …)一样调用。

关于java - 正确使用界面中的default关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60635925/

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