我应该在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);