相关疑难解决方法(0)

Java Bug使用varargs的模糊方法?

我有一个类有两个这样的方法:

public class Dummy{
  public void doIt(String arg1, File arg2, Writer... ctx){
    // Do something very important...
  }

  public void doIt(String arg1, Writer... ctx){
    // Do something else...
  }

  public static void main(String[] args){
    new Dummy().doIt("Test", null);
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望,编译器会给出错误,因为方法调用是不明确的.而是调用第二种方法.

在我们的例子中,ambigous方法是从数据库方法和稍后添加的varargs生成的.现在我们不知道如何避免方法调用的问题,如示例中所示.

有没有其他人有这个问题,并有一个想法如何解决它?

java compiler-construction variadic-functions ambiguous

12
推荐指数
1
解决办法
402
查看次数

为什么var-arg参数的类型"过度近似"?

如果我理解正确,Integer[]是一个子类型Object[].你可以这样做

Object[] objs = new Integer[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

在玩var-args时我意识到,似乎编译器"过度接近"数组类型没有明显的原因.

例如,下面的程序打印123 123.如果印刷它会不会有意义/更精确123 6?

class Test {

    public static Object combine(Object... objs) {

        if (objs instanceof Integer[]) {

            int sum = 0;
            for (Integer i : (Integer[]) objs)
                sum += i;
            return sum;

        } else {

            String concat = "";
            for (Object o : objs)
                concat += o;
            return concat;

        }
    }

    public static void main(String[] args) {
        System.out.println(combine("1", "2", "3")); …
Run Code Online (Sandbox Code Playgroud)

java types variadic-functions

9
推荐指数
1
解决办法
1187
查看次数

具有固定/可变arity(varargs)匹配的最具体方法

在Java语言规范的第15.12.2.5节中,它讨论了如何在具有固定arity的方法和可变arity方法(即varargs)中选择最具体的方法.

我在JLS中找不到的是关于两个方法之间的决定,其中一个是固定的arity,另一个是变量arity.例如:

public interface SomeApi {
    public String getSomething(String arg);       // method 1
    public String getSomething(String ... args);  // method 2
}
Run Code Online (Sandbox Code Playgroud)

按照人们的预期编译就好(由Yoni概述的原因如下).这个调用代码也编译:

SomeApi api = ...
Object o = api.getSomething("Hello");
Run Code Online (Sandbox Code Playgroud)

如果你运行它,method #1(即非varargs方法)被调用.为什么这个调用代码没有含糊不清?为什么固定arity方法比变量arity方法更具体?有人能指出我对规范的相关部分吗?

java variadic-functions jls

4
推荐指数
1
解决办法
1120
查看次数