我得到一个“引用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之前接受布尔值.
因此,为什么它不明确,两种方法签名都适用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。