for循环(如foreach)接受数组或iterables,是否有一个同时包含这两种类型的输入类型,或者我必须编写一个重载方法?我可以用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);
}
2条答案
按热度按时间uplii1fm1#
不幸的是,java没有一个合理的语法来实现这一点,就像
Iterable
数组和数组是离散类型。但是,您可以改进目前的代码,删除重复的doSomething()
通过将数组 Package 为List
通过调用接口Arrays.asList
:628mspwn2#
您必须有两个不同的方法,因为数组不实现
Iterable
.但是,通过将数组 Package 为带有
Arrays.asList()
:这样至少你的逻辑只能用一种谨慎的方法来处理。