Java泛型似乎对类的工作方式与方法的工作方式不同。
我正在关注这个:
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方法,并最终说明是否不可能对类执行相同的操作,或者如果可能的话,如何执行此操作。
doDucklikeThings中的T必须是有效的东西,因为它正在工作。如果我把它传到一个班级里,我会传给什么?
根据要求,以下是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的工作原理。我需要语法,让我注入任何实现所需接口的东西。