最近、ダックタイピングについて聞いたばかりで、それに関するウィキペディアの記事を読みましたが、例をJavaに翻訳するのに苦労しています。これは私の理解に本当に役立ちます.
Javaでのダックタイピングの明確な例と、それをどのように使用できるかを誰かが説明できますか?
最近、ダックタイピングについて聞いたばかりで、それに関するウィキペディアの記事を読みましたが、例をJavaに翻訳するのに苦労しています。これは私の理解に本当に役立ちます.
Javaでのダックタイピングの明確な例と、それをどのように使用できるかを誰かが説明できますか?
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()
}
このブログ投稿を参照してください。動的プロキシを使用して Java でダック タイピングを実装する方法について、非常に詳細に説明しています。
要約すれば:
interface MyInterface {
void foo();
int bar(int x, int y);
int baz(int x);
}
public class Delegate {
public int bar() {
return 42;
}
}
DuckPrxy duckProxy = new DuckPrxyImpl();
MyInterface prxy = duckProxy.makeProxy(MyInterface.class, new Delegate());
prxy.bar(2, 3); // Will return 42.
Dynamic Proxyを使用すると、インターフェイス ダック タイピングが簡単になります。メソッド名と戻り値の型を一致させる必要があります。
Java はダックタイピングを実装していません。
Java での入力は公称です。互換性は名前に基づいています。ダックタイピング (または構造型付け) が Java でどのように見えるかについての例が必要な場合は、次のページを参照してください。構造型付けもサポートする互換言語。
通常、ダック タイピングは動的型付け言語で使用されます。継承階層に関係なく、ニーズを満たすために必要なメソッドまたはプロパティの存在を実行時に確認します。
リフレクションを使用すると見苦しくなりますが、最も近い方法は、ダック タイピングに必要な基準に一致する最小限のインターフェイスを使用することです。このブログ投稿は、コンセプトをうまく説明しています。Python、Ruby、または JavaScript でのダックタイピングの単純さの多くが失われますが、高レベルの再利用性を探している場合は、実際には Java でのかなり良いプラクティスです。