1

さまざまな種類のメディア プレーヤーで使用されるライブラリを実装しています。getPosition個々のユーザーのビデオ プレーヤーごとに異なる方法を使用する必要があります。

現在、これを達成するために、ライブラリを抽象クラスにして、ユーザーが拡張しgetPosition、メディアプレーヤーの位置を取得するために使用するオブジェクト/メソッドでメソッドをオーバーライドする必要があります。

クラスを抽象化する必要がなく、抽象クラスを拡張することなくライブラリにこのメソッドを定義できるようにしようとしていますgetPosition(つまり、ライブラリクラスを抽象化したくありません)。

リフレクションの使用を検討しましたが、実行時までクラス名/メソッド名/パラメーターがわからず、メディアプレーヤーオブジェクトの特定のインスタンスの位置が必要なため、最新の位置を取得できるため、苦労しています.

Java/Android プログラミング パラダイムのグッド プラクティスは何ですか?

反射は進むべき道ですか?もしそうなら、この特定のインスタンスのサンプルコードを見ることができますか(インポートしたライブラリで使用される不明なクラス名/メソッド名/パラメーターなど...)

または、これを達成するためのより良い方法はありますか/クラスを抽象化して Java に移行する方法はありますか?

繰り返しになりますが、ユーザーがクラスを拡張する必要がなく、オブジェクトに対して何らかの setGetPosition() メソッドを呼び出すだけでよいと思います。

編集: 簡単に言えば: ライブラリで未知のクラスの getPosition メソッドを使用できるようにしたいが、クラス全体を抽象化したくない

4

1 に答える 1

2

API の義務を強制するためのインターフェースです。

Positionable(または何でも) を実装するクラスは、(a) として参照でき、(b)のような のメソッドへのPositionable呼び出しを処理できます。PositionablegetPosition

Listインターフェースを考えてみましょう。implements List特定のメソッドをたくさん持たなければならないが、サブクラスである必要はない任意のクラスです。それらはサブクラスかもしれません、そうである必要はありません。

一般に、「プラグイン」システムでは特定の機能を任意に実装でき、その機能はインターフェイスを使用して指定されます。インターフェースは、Java がクラスに仕様への準拠を強制するために提供する最も基本的なメカニズムの 1 つです。

プラグインリフレクションを使用する場合がありますが、インターフェイスのようにコンパイラが強制されないため、オーバーヘッドと複雑さが増し、望ましくない実行時の動作が可能になります。

于 2012-06-05T18:02:55.603 に答える