Java 如何使用带有“的接口”;“撤退”;方法中的参数?

Java 如何使用带有“的接口”;“撤退”;方法中的参数?,java,design-patterns,java-8,interface,api-design,Java,Design Patterns,Java 8,Interface,Api Design,我正在用java编写一些代码,由于我从未接受过任何真正的教育,我正在努力判断这段代码是否正确。我想在我的类中强制使用save(ConfigurationSection),但如果不可用,则允许使用save(String)。我意识到我可以在调用这个方法之前进行转换。这就是我应该做的吗 可序列化的公共接口{ 默认无效保存(字符串路径){ 保存(Claims.getDataManager().getData().createSection(path)); } 作废保存(配置部分); } 我想知道我是否

我正在用java编写一些代码,由于我从未接受过任何真正的教育,我正在努力判断这段代码是否正确。我想在我的类中强制使用save(ConfigurationSection),但如果不可用,则允许使用save(String)。我意识到我可以在调用这个方法之前进行转换。这就是我应该做的吗

可序列化的公共接口{
默认无效保存(字符串路径){
保存(Claims.getDataManager().getData().createSection(path));
}
作废保存(配置部分);
}

我想知道我是否被允许这样做。对于没有任何专业知识的人来说,任何好的资源都是相对容易理解的。

与其提供这样的
default
方法,不如在
ConfigurationSection
类中创建
fromString
适配器方法

public static ConfigurationSection fromString(String s) {
    // ...
}
或者更好,以防您有一些附加逻辑应用于创建生成器类

public class ConfigurationSectionBuilder {
    // dependencies and constructors
    private DataManagerData dataManagerData;

    public ConfigurationSection fromString(String s) {
        return dataManagerData.createSection(s);
    }
}
接口应该如此简单。您想添加什么样的od来创建
ConfigurationSection
(比如从
Long
)的新方法,并且需要一些额外的服务依赖项?这是明显的SRP暴力


也不要像这样创建“链”

Claims.getDataManager().getData().createSection(path)
这是对得墨忒尔定律的践踏

我想在我的类中强制使用
保存(配置部分)

很难强迫用户使用一个重载方法而不是另一个重载方法。如果我有两个选择,我会选择最简单的一个,让API为我做所有的脏活。如果有一个诱人的
字符串
选项,我不会自己构造
配置部分
,除非前者为我提供了一种更灵活/细粒度/性能更好的方法

不过,您可以很好地记录这些方法。明确说明哪种方法更可取,以及原因

如果不可用,则允许使用
保存(字符串)

我不明白。有一种或两种方法。如果用户无法构建
ConfigurationSection
,这并不意味着
save(ConfigurationSection)
会神奇地消失,并出现
save(String)
。您的接口仍然是这两种方法

我想知道我是否被允许这样做

是的,你是。我觉得你的代码很好

Claims.getDataManager().getData().createSection(path)
默认情况下,可以将
字符串
转换为
配置节
,只要它不会带来任何副作用,并且对调用者是透明的。这就像是用户熟悉(或可以熟悉)的快捷方式

顺便说一下,我喜欢你的问题。它看起来简单而谦逊