Я следую этому:
http://rickyclarkson.blogspot.com/2006/07/duck-typing-in-java-and-no-reflection.html
И я пытаюсь адаптировать это:
<T extends CanQuack & CanWalk> void doDucklikeThings(T t)
{
t.quack();
t.walk();
}
Для этого:
public class Activate<D extends CanQuack & CanWalk> {
D d = new MyWaterFowl(); //Type mismatch
}
Несмотря на то, что MyWaterFowl реализует эти интерфейсы.
Мне нужно решение, которое никогда не упоминает MyWaterFowl в < > , так как я собираюсь в конечном итоге просто вставлять его (или что-то еще, что реализует эти интерфейсы).
Если ваш ответ в основном "Вы не можете этого сделать, какой бы он был?". Пожалуйста, объясните, почему он работает над методом doDucklikeThings и окончательно заявляет, что невозможно сделать то же самое с классом или, если возможно, как это сделать.
T в doDucklikeThings должен быть чем-то действительным, так как он работает. Если бы я передал это в класс, что бы я прошел?
Как запрошено здесь код MyWaterFowl:
package singleResponsibilityPrinciple;
interface CanWalk { public void walk(); }
interface CanQuack { public void quack(); }
interface CanSwim { public void swim(); }
public class MyWaterFowl implements CanWalk, CanQuack, CanSwim {
public void walk() { System.out.println("I'm walkin` here!"); }
public void quack() { System.out.println("Quack!"); }
public void swim() { System.out.println("Stroke! Stroke! Stroke!"); }
}
Помните, что я подтвердил, что doDucklikeThings работает. Мне нужен синтаксис, который позволит мне вводить все, что реализует необходимые интерфейсы.