传递 object 的实现而不进行强制转换

Pass an implementation of an object without casting

我提前为标题道歉。

我正在尝试将实现 Animal 的 object Cat 传递给名为 Groom 的接口。在我处理 Cat 实施修饰的 Groom 中,我必须向下转换我的 object 以了解我正在修饰的内容,因为 Groom 接口接受 Animal 作为参数。

public interface Groom {
    void groom(Animal animal);
}

public class CatGroomer implements Groom {
    void groom(Animal animal) {
        Cat cat = (Cat) animal; // <---- how can i avoid this downcast
    }
}

public interface Animal {
    void do();
    void animal();
    void things();
}

public class Cat implements Animal {
    ...
}

Groom 可以像这样通用:

interface Groom<T extends Animal> {
  void groom(T t);
}

public class CatGroomer implements Groom<Cat> {
  void groom(Cat animal) {

  }
}