我添加了三个带参数的方法:
public static void doSomething(Object obj) {
System.out.println("Object called");
}
public static void doSomething(char[] obj) {
System.out.println("Array called");
}
public static void doSomething(Integer obj) {
System.out.println("Integer called");
}
Run Code Online (Sandbox Code Playgroud)
当我调用时doSomething(null),编译器会将错误视为模糊方法.所以是问题,因为Integer和char[]方法,或Integer和Object方法呢?
我有一个带有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个构造带 …