1

我正在实现一个库,该库将被许多不同类型的媒体播放器使用。我需要使用一种getPosition因每个用户的视频播放器而异的方法。

目前,为了实现这一点,我已将我的库设为用户必须扩展的抽象类,然后getPosition用他们用来获取媒体播放器位置的任何对象/方法覆盖该方法。

我正在努力使我的类不必是抽象的,并且他们可以getPosition为我的库定义此方法而不必扩展我的抽象类(即)我不希望我的库类是抽象的。

我已经研究过使用反射,但我正在努力解决它,因为直到运行时我才知道类名/方法名/参数,我想要媒体播放器对象的特定实例的位置,这样我就可以获得最新的位置.

Java/Android 编程范式有什么好的做法?

反思是要走的路吗?如果是这样,我可以看到这个特定实例的一些示例代码(未知的类名/方法名/我的导入库使用的参数等......)

或者有没有更好的方法来完成这个/让我的类抽象成 Java 的方式?

如果用户不必扩展我的类并且可以只在对象上调用某种 setGetPosition() 方法,我更愿意再次这样做。

编辑:简单地说:我希望能够在我的库中使用未知类的 getPosition 方法,但我不希望我的整个类都是抽象的

4

1 回答 1

2

这就是接口的用途——强制执行 API 义务。

实现Positionable(或其他)的类可以(a)引用为 a Positionable,并且(b)处理对Positionable的方法的调用,例如getPosition.

考虑List接口:任何implements List必须有一堆特定方法的类,但它们不需要是子类。它们可能是子类,但不一定

通常,“插件”系统允许任意实现特定功能,并且使用接口指定功能。接口是 Java 提供的用于强制类遵守规范的最基本机制之一。

插件可能会使用反射,但会产生额外的开销、额外的复杂性,并且允许不合需要的运行时行为,正是因为没有像接口那样的编译器强制执行。

于 2012-06-05T18:02:55.603 回答