我有一个带有4个参数的构造函数:String, Object, Object, MyEnum.
public MyClass(String name, Object val1, Object val2, MyEnum cat) {
// find in usage = 202
this.name = name;
this.val1 = val1;
this.val2 = val2;
this.cat = cat;
}
Run Code Online (Sandbox Code Playgroud)
在95%的用例中,最后一个参数是null,所以我想创建另一个构造函数,它只接受3个参数并将最后一个设置为null.
我想到了一些想法,但最后我尝试了以下解决方案:
将最后一个参数更改MyEnum为Integer(编译错误 - 无关紧要):public MyClass(String name, Object val1, Object val2, Integer cat)- 仍然202找到用法
添加具有Object类型的最后一个参数的新构造函数:public MyClass(String name, Object val1, Object val2, Object cat)现在,第一个构造函数(with Integer)具有196个用法,第二个用于6.
这正是我想要的(我有6个非null最后一个元素的调用)但是这种行为的原因是什么?Intellij是否进行了一些检查,如果输入类型MyEnum不能作为Integer类型传递,但是null可以传递给两者,那么为什么在第一个构造函数的情况下会减少6个结果呢?
当我从变化Object到String(现在我有2个构造带String和Integer)两个给我0,当我运行发现功能.
感谢您解释此行为.
这实际上并不是一个 IntelliJ 问题,而是一个 java 构造函数链接问题。
如果 cat 很可能为空,那么您应该有以下两个构造函数:
public MyClass(String name, Object val1, Object val2) {
this(name, val1, val2, null)
}
public MyClass(String name, Object val1, Object val2, MyEnum cat) {
this.name = name;
this.val1 = val1;
this.val2 = val2;
this.cat = cat;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |