2011-12-02 180 views

回答

3

(我假设你在谈论自己的类的设计,而不是如何使用其他已经设计类。)

也不总是“好,”这取决于对象的性质和(在一定程度上)你喜欢的风格。

如果一个对象不能有一个有意义的状态没有一些外部信息,则需要在构造函数中的信息是有道理的,因为你不能以无效状态创建实例。

但是,让构造函数尽可能少地提供信息对于使类在各种情况下易于使用都是很有用的。如果这个类是一个零参数构造函数是可行的,并且不会使类复杂化,那么在支持各种使用情况方面,包括实例被构建为解析某个其他结构(JSON, XML等)。

1

在对象的时间取决于你是否知道值施工。

如果是,那么使用构造函数版本,如果没有,那么你将不得不使用其他版本。

Ofcourse,初始化通过构造函数的版本速度更快,因为它涉及到只有一个函数调用了3组函数调用,也更合乎逻辑的方式。

+0

所以,如果我把所有的价值它能够更好地去使用参数版本的构造... –

+0

@Vincent我想说这个问题的答案取决于参数的参数变化的可能组合的数量。 –

+1

@Vincent:是的,如果所有的值在构造对象时已知,使用param版本。这是最好的方法。 –

0

这一切都取决于应用程序。

调用参数的构造将是一个好主意,如果在编译的时候,你知道什么值必须考虑到你的变量,而不是调用setter方法。因为你正在调用3个setter方法并且在参数化构造函数中,所以你只是自己传递给了cnostructor。

但是,如果在编译的时候你不知道什么值,给予那么你怎么能叫paramterized构造。

但是对于初始化,它将更好地调用参数化的构造函数。

2

有也是建立在使用fluent interfaces

MyObject obj = new MyObject().setValue1("1").setValue("2").setValue("3"); 

我个人很喜欢这种方法,但第三个选项,如果参数的数量不足和在施工时已知和变化的可能组合参数很短,那么我会参照构造函数的参数路由。我认为大多数人会同意,12个构造函数重载是一个眼睛疼痛。

+0

可读性很重要。在所有条件都相同的情况下,我更喜欢像上面描述的那样更具可读性的方法,而不是具有未知参数的构造函数。 –

+0

@GustavBertram我应该澄清。对象需要的基于状态的数据可能最适合作为构造函数参数。向对象添加附加内容是使用此方法IMO的好时机。 –

0

存在语义差异。如果(1)您正在初始化具有初始状态的对象。在(2)中,您正在更改现有实例的状态(3次)。这是一个小的差异,但可能在更复杂的系统中变得非常重要(特别是如果您依赖各种JavaBean约定)。但是,没有人错或者更好。

1

在构造函数中调用它总是更好的性能如果您已经知道了值。

+1

***没有。***即使知道这些值,使用参数化构造函数并不总是更好。 –

+0

@HarryJoy:我认为它不会好,如果参数化的构造函数正在初始化除字符串n stuff.is它之外的其他对象? –

+0

@Vincent哪种类型的其他东西?我并不是说它不好。您可以/应该使用它,但只能使用特定参数类型的一些有限参数。总之,它不应该导致内存不足或高内存操作。 –

1

然后有我的首选替代方案。事情是一些界面的名称。它创建一个匿名类。

Thing createThing (final int val1 , final int val2 , final int val3) 
{ 
     return new Thing () 
     { 
       // can use val1, val2, val3 
     } ; 
}