加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

这个Java方法调用的歧义在哪里?

发布时间:2020-12-15 03:15:15 所属栏目:Java 来源:网络整理
导读:我得到一个“引用make is ambiguous”编译错误,我不明白. 我有这两种方法 public static T T make(String name,ClassT parentClass,boolean rethrowRuntimeExceptions,Object... params) throws DLException public static T T make(String name,Object... p
我得到一个“引用make is ambiguous”编译错误,我不明白.

我有这两种方法

public static <T> T make(String name,Class<T> parentClass,boolean rethrowRuntimeExceptions,Object... params) throws DLException

 public static <T> T make(String name,Object... params) throws DLException

这行代码被标记为含糊不清

String className = "clsNme";
  String one = "1";
  String two = "2";     
  SimpleFactory.make(className,Object.class,false,one,two);

这是错误

both method <T#1>make(String,Class<T#1>,boolean,Object...) in SimpleFactory and method <T#2>make(String,Class<T#2>,Object...) in SimpleFactory match
    [javac]   where T#1,T#2 are type-variables:
    [javac]     T#1 extends Object declared in method <T#1>make(String,Object...)
    [javac]     T#2 extends Object declared in method <T#2>make(String,Object...)

布尔参数的存在是否使第一个方法比第二个方法更接近?

如果重要,这是PowerMock测试的一部分.这是完整的方法

public void makeCallsMakeWithFalse() throws Throwable {
  Object expected = mock(Object.class);
  String className = "clsNme";

  String one = "1";
  String two = "2";

  spy(SimpleFactory.class);

  doReturn(expected).when(SimpleFactory.class);
  SimpleFactory.make(className,two);  // causes error

  Object observed = SimpleFactory.make(className,two); // doesn't cause error
  assertEquals(expected,observed);

  verifyStatic();
  SimpleFactory.make(className,two);  // causes error

}

如果有帮助:我使用的是javac 1.8.0_77,Mokito 1.10.19和Powermock 1.6.3.

解决方法

问题在于
Object... params

当调用SimpleFactory.make(className,two)时;
Java不知道是否将“false”打包成一个布尔对象并将其作为“params”varargs数组的第一个参数传递(Boolean extends Object)并使用

make(String name,Object... params)

或者是否打电话

make(String name,Object... params)

因为该签名也可以在params varargs之前接受布尔值.

因此,为什么它不明确,两种方法签名都适用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读