gpt4 book ai didi

java - Init block VS 在构造函数中调用的 init() 私有(private)方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:17 26 4
gpt4 key购买 nike

我知道在 Java 中创建实例时有多种方法可以初始化内容,但我对以下两种可能性之间的区别感兴趣。

案例1:

{
// common init code for all constructors
}

public MyType() {
super();
// specific init code
}

public MyType(Object arg) {
super(arg);
// specific init code
}

案例2:

public MyType() {
super();
init();
// specific init code
}

public MyType(Object arg) {
super(arg);
init();
// specific init code
}

private void init() {
// common init code for all constructors
}

我相信这两种情况在代码方面是等效的。我认为第一个更快,因为少了一个方法调用,但另一方面,对于不太了解初始化的人来说,它可能会令人困惑。

我是否错过了另一个差异,可能导致我们选择其中一个而不是另一个? 我应该优先使用哪个选项?

注意: init() 方法是私有(private)的,我知道不同的可见性可能会导致初始化错误(子类化时),这不是重点。

最佳答案

Maybe the first is faster because there is 1 less method call, but I think it is less readable.

我什至不会在这里考虑效率,因为它只会对方法调用产生微小的差异。但为什么你认为它的可读性较差?这是 Java 语言的一个众所周知的特性。

Which option should I use preferably?

第一种方法的好处是,您必须编写更少的代码。第二种方法存在人为错误的可能性很小。通常,当您希望在每个构造函数中完成初始化时,您会使用实例初始化程序 block 。这使您无需在所有构造函数中显式编写相同的代码。使用另一种方法,您必须记住从所有构造函数中调用 init() 方法。

但是如果您希望某些初始化成为某些构造函数的一部分,那么第二种方法可能会很有用。但在我看来,这种情况非常罕见。

关于java - Init block VS 在构造函数中调用的 init() 私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564466/

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