只是为了好奇......
假设我有一个包含两个构造函数的类:
public Class(){}
public Class(int x){}
我希望通过以下语句创建一个新类:
new Class( ( true ) ? 100 : null);
这可以接受吗? null会使用empty / default构造函数实例化Class吗?如果没有,有没有办法用三元运算符完成这个?
请注意,我使用的是Java版本6.
答案 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);