有两种方法:
public static TermsQueryBuilder termsQuery(String name, int... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, Object... values) {
return new TermsQueryBuilder(name, values);
}
当我打电话
termsQuery("operatorType", 1);
它说这是模棱两可的。
请帮助......
所有方法都在Elasticsearch中,例如:
public static TermsQueryBuilder termsQuery(String name, String... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, int... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, long... values) {
return new TermsQueryBuilder(name, values);
}
...
public static TermsQueryBuilder termsQuery(String name, Object... values) {
return new TermsQueryBuilder(name, values);
}
当我打电话给termsQuery("operationType","1")
时,没有含糊不清。
当我打电话给termsQuery("operationType",1)
时,模棱两可。
当我打电话给termsQuery("operationType",Arrays.asList(searchParam.getOperatorType())
时,并不含糊。
不解.....
答案 0 :(得分:2)
只需重命名一个或两个方法,错误就会消失。
您不能使用您想要的签名重载此方法,因为您的调用可以由两个方法定义匹配,并且类型int
和Object
不在超类 - 子类关系中,因此比另一个更具体。
考虑
integerTermsQuery
和
objectTermsQuery
修改强>
正如您在评论中指出的那样,带有String...
参数的版本与Object...
不冲突,而数组与String
是Object
的子类是协变的。
答案 1 :(得分:2)
这是不明确的,因为1
可以自动转换为Integer
,Object
签名接受int
。它也可以被Object...
签名直接接受。
你应该通过重命名方法或没有这样的通用参数列表(AVAudioEngine
)来明确这两个方法
答案 2 :(得分:1)
如果存在<any primitive>...
,则使用varargs Object...
的所有构造函数都不能使用逗号分隔的基元列表直接调用,因为所有Object...
都是不明确的。编译器错误消息明确指出。
我们可以使用数组调用它们:
termsQuery("operatorType", new int[]{1, 2, 3})
。
TermsQueryBuilder termsQuery(String name, Object... values)
和TermsQueryBuilder termsQuery(String name, String... values)
不明确,因为虽然String
也是Object
,但它是一个比Object
更特殊的对象。
以下代码可以正常运行,并且应该显示确切的结果:
public class TestAmbiguous {
public static TermsQueryBuilder termsQuery(String name, int... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, double... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, Object... values) {
return new TermsQueryBuilder(name, values);
}
public static TermsQueryBuilder termsQuery(String name, String... values) {
return new TermsQueryBuilder(name, values);
}
public static void main(String[] args) {
TermsQueryBuilder builder;
builder = termsQuery("operatorType", 1, 1.0, 1.0f, "test", new Integer(1), new Double(1), new Float(1), new String("test"));
builder = termsQuery("operatorType", "test", new String("test"));
builder = termsQuery("operatorType", new int[]{1, 2, 3});
builder = termsQuery("operatorType", new double[]{1, 2, 3});
builder = termsQuery("operatorType", new float[]{1, 2, 3});
builder = termsQuery("operatorType", (Object[]) new Float[]{1f, 2f, 3f});
}
}
class TermsQueryBuilder {
TermsQueryBuilder(String name, int... values) {
System.out.println("_____________________________________");
System.out.println("primitive int");
for (int i = 0 ; i < values.length; i++) {
System.out.println(values[i]);
}
}
TermsQueryBuilder(String name, double... values) {
System.out.println("_____________________________________");
System.out.println("primitive double");
for (int i = 0 ; i < values.length; i++) {
System.out.println(values[i]);
}
}
TermsQueryBuilder(String name, Object... values) {
System.out.println("_____________________________________");
System.out.println("Any objects");
for (int i = 0 ; i < values.length; i++) {
System.out.println(values[i].getClass());
System.out.println(values[i]);
}
}
TermsQueryBuilder(String name, String... values) {
System.out.println("_____________________________________");
System.out.println("String objects");
for (int i = 0 ; i < values.length; i++) {
System.out.println(values[i].getClass());
System.out.println(values[i]);
}
}
}