【发布时间】:2016-05-12 15:45:59
【问题描述】:
我刚刚在设计一个接口时遇到了一个问题,该接口的方法可能具有可变数量的输入参数。
public interface FoobarSerialization<T> {
Foobar serialize(T obj);
}
问题是,对于实现此接口的类,它们需要不同数量的输入参数。
public class FoobarA implements FoobarSerialization<FoobarA> {
@Override
public Foobar serialize(FoobarA obj, int bar) {
//...
}
}
public class FoobarB implements FoobarSerialization<FoobarB> {
@Override
public Foobar serialize(FoobarB obj, Date date, String str) {
//...
}
}
有没有好的设计或任何真正的方法来解决这个问题?我知道接口中的方法可以声明为:
Foobar serialize(T... obj);
但我不确定设计这样的界面是否是一个好习惯。
有什么想法吗?
更新:我使用接口的意图来自需要为不同目的进行序列化和反序列化的类的集合。它们作为同一域下的组件。但是它们的序列化方法是完全不同的,特别是考虑到它们对不共享任何共同特征或类的对象和服务的依赖。
我想这里要问的正确问题是:就设计而言,当退出一组具有相同行为(序列化、反序列化、doSomething 等)但输入参数不同的类时,最好的方法是什么?
【问题讨论】:
-
这不是你应该有接口的东西。拥有一个接口的意义在于,如果你有一个接口的实例,你应该总是能够用相同的参数调用它,而这里不是这样。
-
@LouisWasserman 同意。在这种情况下使用接口似乎不是一个好主意。那么这里最好用什么?
-
最好的东西就是什么都没有。直接写方法即可;不要尝试任何花哨的继承魔法。
标签: java parameters interface