Java 6:构造函数参数,null和三元运算符

时间:2013-11-18 20:06:49

标签: java null ternary-operator java-6

只是为了好奇......

假设我有一个包含两个构造函数的类:

public Class(){}
public Class(int x){}

我希望通过以下语句创建一个新类:

 new Class( ( true ) ? 100 : null);

这可以接受吗? null会使用empty / default构造函数实例化Class吗?如果没有,有没有办法用三元运算符完成这个?

请注意,我使用的是Java版本6.

3 个答案:

答案 0 :(得分:7)

你可以这样做

Class cl = flag ? new Class(100) : new Class();

根据定义,? :的类型与最后一个参数相同。即对象,你不能使它更少,价值更低。

答案 1 :(得分:2)

new Class( ( true ) ? 100 : null);

你没有空构造函数的原因是因为,我们唯一的选择是new Class(100)new Class(null)

1. new Class(null) 
2. new Class()

现在1与2

不同

null被理解为Object,其中构造函数期望int。如果我们有

 public Class(Integer x){} 

然后允许new Class(null),因为Object是Integer的超类。因此,唯一的选择是

boolean check = true;
check ? new Class(100) : new Class();

答案 2 :(得分:0)

您可以使用变量参数

Class(int... x){} //constructor

然后使用new Class();new Class(2);