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/