java - 方法可以接收 Array 或 Iterable 吗?

标签 java

for 循环(如 foreach)接受数组或可迭代对象,是否有涵盖两者的输入类型,或者我是否必须编写重载方法?我可以用 Java:

public void serialize (ArrayOrIterable xxx){
  for (Object x: xxx) {
     x.doSomething()
  }
}

或者我唯一的选择是重复代码?

public void serialize (Object[] xxx){
  for (Object x: xxx) {
     x.doSomething()
  }
}

public void serialize (Iterable xxx){
  for (Object x: xxx) {
     x.doSomething()
  }
}

编辑结论

更好的是,类结构实际上是一个抽象类及其实现,因此我可以在 asbtract 类中定义数组的行为,任何实现只需要覆盖一个方法。

public abstract class Serializer {

    public final void serialize(Object[] input) {
         serialize(Arrays.ssList(input));
    }

    public abstract void serialize(Iterable input);

}

最佳答案

不幸的是,Java 没有合理的语法来执行此操作,因为 Iterable 和数组是离散类型。然而,您可以改进当前代码,通过调用 Arrays.asList:

public void serialize (Object[] xxx){
  serialize (Arrays.asList(xxx));
}

public void serialize (Iterable xxx){
  for (Object x: xxx) {
     x.doSomething()
  }
}

关于java - 方法可以接收 Array 或 Iterable 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22324458/

相关文章:

java - 从 mainactivity 访问 searchview 查询文本

java - Jersey 2.22 UnsatisfiedDependencyException

java - 开关返回关闭状态

java - ExecutorService Future::变得非常慢

java - Websphere 7 和 JSTL : Cannot get value from arrays -> Missing Resource in EL implementation: ? ??propertyNotReadable?

java - invokeAll() 是 java 7 中的阻塞调用

java - Java中同步访问资源(Spring MVC)

java - CombinedDomainXYPlot 不重新缩放域轴

java - 在Eclipse插件中调用jar使用流程

java - 如何获取重定向 URL