2013-05-17 179 views
1

为什么一些示例类在Swing Tutorials(抱歉,我不记得哪一个,我可能是错的,但我知道我看到这个地方)使用私有的方法是这样?:Java - 私有初始化程序或在构造函数中的初始化?

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     initializeComponents(); 
     . 
     . 
     . 
    } 
    private void initializeComponents(){ 
     //initializing 
    } 
} 

这是正确的约定,还是这样?:

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     //initializing components 
      //component initialization 
     . 
     . 
     . 
    } 
} 

哪种样式的初始化更好?

我只看到了有大量组件初始化使用私有方法的示例类,所以它看起来像是为了可读性。我对吗?如果是这样,不会使用评论也提供了类似的可读性水平?

+0

哦,人...四个答案,几乎相同的内容,但都是独一无二的。哪个答案是被标记为已接受的答案? – Justin

回答

2

所以它似乎是为了可读性。我对吗?

是的,它是更好的可读性,以及保持所有组件初始化在一个方法中,类似的方法是用于.Net框架中的WinForm。如果只使用注释,那么想象你的构造函数只用于组件初始化的200行代码。

如果是这样,就不会使用注释还提供了类似级别的 可读性?

组件初始化不仅仅是构造函数调用组件类,它通常包括设置其他属性,如高度,宽度,位置等。如果使用注释和空白现在想象一下,然后构造将是数百只是因为组件的初始化。

+0

构造函数是“数百行代码”这么糟糕吗? – Justin

+0

@gangqinlaohu,它总是更好的任何方法尽可能少线路。它很适合维护。构造函数也是一种方法,所以是有数百行代码是不好的,直到你现在甚至不能进入镜像的位置。由于您可以将初始化部分解压到单独的方法中,因此它更易于维护并提供更好的可读性。 – Habib

+0

好的(我还没有进入那个位置)。 – Justin

1

我认为他们这样做是为了可读性。从构造函数中分离GUI组件的初始化会使构造函数代码更加清晰和简洁(否则,您将拥有巨大的构造函数方法)。因此,您确切知道哪些代码块与GUI相关,哪些与该类的内部功能相关。

+0

为什么他们不能使用评论和空白? – Justin

1

当然,第一个更好。它的所有更好的可读性和maintanaibility。

第二种方法并不好,因为在大多数情况下,评论实际上很糟糕且不可靠。如果某些逻辑被改变,评论通常不会更新。如果代码本身很好,包括自解释名称的方法,它总是更好。提取一些逻辑上与单个责任相关的代码作为抽象步骤(您不需要深入了解细节)

+0

评论和空白有什么不好? – Justin

+0

这很有道理。 – Justin

1

如果您需要初始化许多字段,并且也有不同的类型。那么只有它能够更好地投入到功能,从constrctor调用它,就像 -

public MyClass{ 
    public MyClass(){ 
     initializeComponentType1(); 
     initializeComponentType2(); 
     ... 
    } 
    /** 
    * initializing type 1 component 
    */ 
    private void initializeComponentType1(){ 
     //initializing 
    } 
    /** 
    * initializing type 2 component 
    */ 
    private void initializeComponentType2(){ 
     //initializing 
    } 
} 

它提高可读性和代码可维护性。总是建议编写简单,可读和可维护的代码。

但是,如果有一组启动,你不需要创建函数。