Java中鸭子打字的例子是什么?

2022-09-01 05:43:40

我最近刚听说鸭子打字,我读了维基百科上关于它的文章,但我很难将这些例子翻译成Java,这真的有助于我的理解。

有谁能举出一个在Java中打字的明显例子,以及我如何使用它?


答案 1

Java在设计上不适合鸭子类型。你可以选择这样做的方法是反射:

public void doSomething(Object obj) throws Exception {

    obj.getClass().getMethod("getName", new Class<?>[] {}).invoke(obj);
}

但我主张用动态语言(如Groovy)来做这件事,这样更有意义:

class Duck {
    quack() { println "I am a Duck" }
}

class Frog {
    quack() { println "I am a Frog" }
}

quackers = [ new Duck(), new Frog() ]
for (q in quackers) {
    q.quack()
}

参考


答案 2

请参阅此博客文章。它非常详细地介绍了如何使用动态代理在Java中实现鸭子类型。

综上所述:

  • 创建一个接口,表示您希望通过鸭子键入使用的方法
  • 创建一个使用此接口的动态代理和一个通过反射调用基础对象上接口方法的实现对象(假设签名匹配)

推荐