gpt4 book ai didi

java - 更喜欢非成员非友元函数......在 Java 中?

转载 作者:太空狗 更新时间:2023-10-29 23:05:52 24 4
gpt4 key购买 nike

<分区>

免责声明:这个问题是针对那些认为 Scott Meyers 在 Effective C++ 的第 23 项中的建议是 良好的 OO 设计 的人——至少在 C++ 中是这样。

在不存在全局函数的 Java 中,乍一看这条原则似乎不适用,但在我看来确实如此。以 Scott Meyers 自己为例。

public class WebBrowser {
public void clearCache() {}
public void clearHistory() {}
public void removeCookies() {}
}

通过创建一个包含 static 便捷方法的关联“命名空间”类,我通过最小化可以访问其内部结构的代码量增加了 WebBrowser 的封装。毕竟,Java 中的静态方法本质上是全局函数(假设类中的所有内容都是公共(public)的和静态的)。

public class WebBrowserStuff {
private WebBrowserStuff() {} // prevent instantiation

public static void clearBrowser(WebBrowser browser) {
browser.clearCache();
browser.clearHistory();
browser.clearRemoveCookies();
}
}

我能看到的唯一缺点是 Java 中没有依赖于参数的查找,因此调用该方法稍微冗长一些。

WebBrowserStuff.clearBrowser(browser);

我的问题是,考虑到非成员函数的这种使用在 C++ 中是可取的(请参阅我的免责声明),除了增加冗长之外,还有什么理由让您不想在 Java 中这样做?这个问题具体是关于 C++ 和 Java 在这种技术方面的区别。

有兴趣听取关于这是否通常是好的面向对象设计的个人意见,尽管我有兴趣听取是否存在任何文化差异在 C++ 和 Java 之间,这可能会导致普遍的意见倾向于一种方式或另一种方式。

[编辑]

不幸的是,我并没有真正得到我的问题的答案,我试图让它不那么基于意见的编辑并没有阻止它被关闭,所以我无法选择一个可接受的答案。人们可以将此解释为您确实没有技术原因不想这样做(假设它是 C++ 中的良好实践),并且对这种技术的任何反对纯粹是个人或文化上的 Java 事情。

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