【问题标题】:What does the points stand for? [duplicate]积分代表什么? [复制]
【发布时间】:2015-09-16 02:35:25
【问题描述】:

当我像这样在 Java 中编写构造函数时:

import java.io.IOException;
import java.io.OutputStream;

public class MultiOutputStream extends OutputStream{

    OutputStream[] oStream;

    public MultiOutputStream(OutputStream oStream) { 
        this.oStream = oStream;
        // TODO Auto-generated constructor stub
    }

    @Override
    public void write(int arg0) throws IOException {
        // TODO Auto-generated method stub

    }
}

Eclipse 现在显示:类型不匹配:无法从 OutputStream 转换为 OutputStream[]。所以 Eclipse 像这样更正了我的构造函数:

import java.io.IOException;
import java.io.OutputStream;

public class MultiOutputStream extends OutputStream{

    OutputStream[] oStream;

    public MultiOutputStream(OutputStream... oStream) {
        this.oStream = oStream;
        // TODO Auto-generated constructor stub
    }

    @Override
    public void write(int arg0) throws IOException {
        // TODO Auto-generated method stub

    }

}

这些点代表什么?

提前致谢!

【问题讨论】:

  • 目的是允许开发者传递 1, 2 , 3... args,而无需编写显式匹配的构造函数,也无需强制您接受Collection
  • 你之前做过哪些研究?
  • 至少这三个时期我不知道怎么google。
  • 如果你不想使用可变参数,你可以像这样编写你的构造函数 - public MultiOutputStream(OutputStream[] oStream) {this.oStream = oStream;}跨度>

标签: java eclipse


【解决方案1】:

它们被称为“可变参数”,参见http://docs.oracle.com/javase/7/docs/technotes/guides/language/varargs.html

最后一个参数的类型后面的三个句点表示 final 参数可以作为数组或序列传递 论据。

【讨论】:

  • 非常感谢!不知道如何谷歌这些点。 :)
【解决方案2】:

这是一种语法糖,称为 varargs

public void method(int... varargs) { }

您可以使用多个参数调用此方法,例如:method(3, 14),也可以使用method(42)
这是处理具有不确定数量参数的方法的常用方法,例如在String::format 中使用。

编译器会在后台自动将参数收集到一个数组中。在这段代码中,varargs 是一个由int 组成的数组,因此您可以轻松地对其进行循环。

public void method(int... varargs) { 
  for(int i=0; i < varargs.length; i++) {
    System.out.println("Argument n°"+i+" is "+varargs[i]);
  }
}

【讨论】:

    【解决方案3】:

    这些点称为varargs。你可以阅读更多关于他们的信息here

    总而言之,使用它们是为了允许无限数量的该类型的参数到一个方法。这允许更容易访问和更清晰的代码。 vararg 在您尝试使用时就像一个数组。

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 2011-07-10
      • 2016-12-25
      • 2010-11-29
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多