我应该在Java中使用不同的方法名还是重载参数?
我提出了两种不同的方法来实现我的类中的一些方法:我应该在Java中使用不同的方法名还是重载参数?,java,Java,我提出了两种不同的方法来实现我的类中的一些方法: class Zoo { public void addTiger(Tiger tiger); public void addEmu(Emu emu); // ... } class Zoo { public void add(Tiger tiger); public void add(Emu emu); } 我可以看出,两者之间的唯一区别是冗长——但我是否遗漏了更基本的东西?一种方法会让未来的事情变
class Zoo {
public void addTiger(Tiger tiger);
public void addEmu(Emu emu);
// ...
}
class Zoo {
public void add(Tiger tiger);
public void add(Emu emu);
}
我可以看出,两者之间的唯一区别是冗长——但我是否遗漏了更基本的东西?一种方法会让未来的事情变得更加困难吗?添加老虎和添加Emu有什么区别?为什么不制作一个动物界面呢 我会这样做:
class Tiger implements Animal { }
class Emu implements Animal { }
class Zoo {
void add(Animal animal) { }
}
Zoo zoo = new Zoo();
zoo.add(new Tiger());
zoo.add(new Emu());
但这两种方法不会有太大区别,它们都是对的或错的,因为它们违反了原则。如果将来您决定合并Emu和Tiger,让它们实现相同的接口或扩展相同的类,从而使用
class Zoo {
public void add(Tiger tiger);
public void add(Emu emu);
}
将使您的工作更轻松,因为在使用您的方法的地方,您无需更改任何内容。因此,是的,第一种方法可能会使将来的事情变得更加困难。基于您正在使用的上下文 在这种情况下,老虎和鸸鹋都是动物。我更喜欢使用重载方法,这会有意义的。如果老虎和鸸鹋都是从动物类继承的话。您可以声明一个动物数组:
Animal[] zoo;
这个动物园里有老虎和鸸鹋。您可以这样做:
for (int i = 0; i < zoo.length; i++) {
BigZoo.add(zoo[i]);
}
而不是:
add(User user);
add(Data data);
希望这能对你有所帮助:)是的,我可以同意这一点——但为了论证起见,假设它们有很大的不同,需要两种方法。那么,我敢说,使用访问者模式?(哦,我说了!)我以前从未使用过访问者模式——如果模式不是太麻烦的话,你能提供一个
Zoo
示例吗?如果没有,我会在以后阅读并尝试编辑我的帖子。我已经在那里发布了相同的问题:两者都做有什么不对<代码>公共无效添加老虎{add(Tiger);}代码>@OldCurmudgeon将方法加倍…:我理解你的第一点,其他人也同意,但你没有为你的第二点提供任何理由。为什么addUser
而不是add(User-User)
?@sdadas因为User
和Data
对象的含义不同。所以,你可以这样想:当你在阅读add(User-User)
时,当你在阅读add(Data-Data)
时,你会认为User
和Data
都有某种关系。方法名称应该清楚地告诉他们将做什么。当您尝试命名一个方法时,这一点很重要。在第一个示例中,最好命名为addAnimal()
而不仅仅是add
谢谢,这是关于将来合并方法的一个好观点。
add(User user);
add(Data data);