Передайте реализацию объекта без приведения - PullRequest
0 голосов
/ 26 ноября 2018

Я заранее прошу прощения за заголовок.

Я пытаюсь передать объект Cat, который реализует Animal, в интерфейс с именем Groom.В моем Groom, который обрабатывает чистку реализации Cat, я должен уменьшить свой объект, чтобы понять, что я чистлю, потому что интерфейс 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 {
    ...
}

1 Ответ

0 голосов
/ 26 ноября 2018

Groom можно сделать общим, как это:

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

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

  }
}
...