【发布时间】:2012-06-05 16:49:28
【问题描述】:
我正在实现一个可供许多不同类型的媒体播放器使用的库。我需要使用 getPosition 方法,该方法会因每个用户的视频播放器而异。
目前,为了实现这一点,我已将我的库设为用户必须扩展的抽象类,然后用他们用来获取媒体播放器位置的任何对象/方法覆盖 getPosition 方法。
我正在努力使我的类不必是抽象的,并且他们可以为我的库定义这个 getPosition 方法,而不必扩展我的抽象类(即)我不希望我的库类抽象一点。
我已经研究过使用反射,但我正在努力解决它,因为直到运行时我才知道类名/方法名/参数,并且我想要媒体播放器对象的特定实例的位置,以便我可以获得最新位置。
Java/Android 编程范式有什么好的做法?
反射是要走的路吗?如果是这样,我可以看到这个特定实例的一些示例代码(未知的类名/方法名/我的导入库使用的参数等...)
或者有没有更好的方法来完成这个/让我的类抽象成 Java 的方式?
如果用户不必扩展我的类并且可以只在对象上调用某种 setGetPosition() 方法,我更愿意。
编辑: 简单地说:我希望能够在我的库中使用未知类的 getPosition 方法,但我不希望我的整个类都是抽象的
【问题讨论】:
-
我不确定我是否理解反射是如何进入这个问题的。如果您想在不使用抽象基类的情况下强制执行方法签名,请创建一个接口。您可能希望收紧问题以提供进一步的说明。
-
很抱歉,但在您[直接]使用它们之前,将抽象类保留为抽象类通常是一种很好的编程习惯。
-
如果可以避免,就不要使用 reflection,在 Android/Dalvik 上速度太慢了
-
所以反射 = 不好,对于 android。但是@DaveNewton 您是否建议我创建一个包含用户可以定义的 getPosition 方法的位置接口?简单地说:我希望能够在我的库中使用未知类的 getPosition 方法,但我不希望我的整个类都是抽象的反射只是我努力实现这一目标的一种可能性。
-
@VinC 移动回答;有点多的评论。
标签: android reflection dynamic methods