如何在方法中使用带有 "fallback" 参数的接口?
How do I use interfaces with "fallback" parameters in the methods?
我正在 java 中编写一些代码,并且正在努力决定这是否是好的代码,因为我从未接受过任何真正的教育。我想在我的 类 中强制使用 save(ConfigurationSection),但如果不可用,允许使用 save(String)。我意识到我可以在调用此方法之前进行此转换。那是我应该做的吗?
public interface Serializable {
default void save(String path){
save(Claims.getDataManager().getData().createSection(path));
}
void save(ConfigurationSection section);
}
我想知道我是否可以这样做。还有任何对行话没有任何真正了解的人相对容易理解的好资源。
与其提供这样的 default
方法,不如在 ConfigurationSection
class
中创建一个 fromString
适配器方法更好
public static ConfigurationSection fromString(String s) {
// ...
}
或者更好的事件,以防你有一些额外的逻辑被应用到创建构建器 class
public class ConfigurationSectionBuilder {
// dependencies and constructors
private DataManagerData dataManagerData;
public ConfigurationSection fromString(String s) {
return dataManagerData.createSection(s);
}
}
界面应该就是这么简单。您想要添加创建 ConfigurationSection
的新方法是什么(假设来自 Long
),并且为此您需要一些额外的服务依赖性?明显违反SRP
也不要像这样创建'chains'
Claims.getDataManager().getData().createSection(path)
这违反了Demeter 法则
I want to force use save(ConfigurationSection)
in my classes
很难强制用户使用一种重载方法而不是另一种方法。如果我有两个选择,我会选择最简单的一个,让 API 为我完成所有脏活。如果有诱人的 String
选项,我不会自己构建 ConfigurationSection
除非前者为我提供更多 flexible/fine-grained/performant 方式。
不过,您可以很好地记录这些方法。清楚地说明哪种方法更可取,以及为什么。
if not available allow for using save(String)
我没听懂。有一种方法或两种方法。如果用户无法构建 ConfigurationSection
,并不意味着 save(ConfigurationSection)
神奇地消失了,而 save(String)
出现了。你的接口还是这两个方法
I'd like to know if I am allowed to do this.
是的,你是。你的代码在我看来绝对没问题。
Claims.getDataManager().getData().createSection(path)
可以作为将 String
转换为 ConfigurationSection
的默认方式,只要它不会带来任何副作用,并且对调用者是透明的。它就像是用户已经(或可以)熟悉的快捷方式。
顺便说一句,我喜欢你的问题。看起来朴实无华。
我正在 java 中编写一些代码,并且正在努力决定这是否是好的代码,因为我从未接受过任何真正的教育。我想在我的 类 中强制使用 save(ConfigurationSection),但如果不可用,允许使用 save(String)。我意识到我可以在调用此方法之前进行此转换。那是我应该做的吗?
public interface Serializable {
default void save(String path){
save(Claims.getDataManager().getData().createSection(path));
}
void save(ConfigurationSection section);
}
我想知道我是否可以这样做。还有任何对行话没有任何真正了解的人相对容易理解的好资源。
与其提供这样的 default
方法,不如在 ConfigurationSection
class
fromString
适配器方法更好
public static ConfigurationSection fromString(String s) {
// ...
}
或者更好的事件,以防你有一些额外的逻辑被应用到创建构建器 class
public class ConfigurationSectionBuilder {
// dependencies and constructors
private DataManagerData dataManagerData;
public ConfigurationSection fromString(String s) {
return dataManagerData.createSection(s);
}
}
界面应该就是这么简单。您想要添加创建 ConfigurationSection
的新方法是什么(假设来自 Long
),并且为此您需要一些额外的服务依赖性?明显违反SRP
也不要像这样创建'chains'
Claims.getDataManager().getData().createSection(path)
这违反了Demeter 法则
I want to force use
save(ConfigurationSection)
in my classes
很难强制用户使用一种重载方法而不是另一种方法。如果我有两个选择,我会选择最简单的一个,让 API 为我完成所有脏活。如果有诱人的 String
选项,我不会自己构建 ConfigurationSection
除非前者为我提供更多 flexible/fine-grained/performant 方式。
不过,您可以很好地记录这些方法。清楚地说明哪种方法更可取,以及为什么。
if not available allow for using
save(String)
我没听懂。有一种方法或两种方法。如果用户无法构建 ConfigurationSection
,并不意味着 save(ConfigurationSection)
神奇地消失了,而 save(String)
出现了。你的接口还是这两个方法
I'd like to know if I am allowed to do this.
是的,你是。你的代码在我看来绝对没问题。
Claims.getDataManager().getData().createSection(path)
可以作为将 String
转换为 ConfigurationSection
的默认方式,只要它不会带来任何副作用,并且对调用者是透明的。它就像是用户已经(或可以)熟悉的快捷方式。
顺便说一句,我喜欢你的问题。看起来朴实无华。