我目前正在开发基本上有两种变体,基本变体(用于第三方开发人员)和特权变体(将在内部使用)的Android SDK。Java继承困境
特权SDK只是增加了第三方开发人员无法直接访问的附加功能。
我的想法是使用宏选择性地删除功能,但Java不支持。
我的下一个想法是采取基本变化,并在那里扩展类和接口来产生特权变体。
我现在的问题是使用继承方法(这产生了代码味道是向我表示,还有一个可能是一个更好的解决方案),如下所示:
的BaseAPI
实例有BaseInterface
一个实例,该实例在其一些方法中使用BaseDevice
作为参数。
特权SDK具有PrivilegedAPI
,PrivilegedInterface
和PrivilegedDevice
的实例。
问题出现在想要接口采用BaseDevice
或PrivilegedDevice
的实例。
我会非常喜欢这个BaseInterface:
public interface BaseInterface {
void deviceConnected(BaseDevice device);
}
这PrivilegedInterface:
public interface PrivilegedInterface extends BaseInterface {
//overwrites deviceConnected in BaseInterface with PrivilegedDevice
@Override
void deviceConnected(PrivilegedDevice device);
}
但我不能用PrivilegedDevice
在PrivilegedInterface
不同的参数覆盖deviceConnected
。
我的另一个想法是利用构建口味来隐藏功能,但这似乎并不适合。
任何想法?
尽管 – lorenzo
使Privileged Device(Child)从BaseDevice(Parent)扩展,但'PrivilegedDevice'不应在'BaseInterface'中可用。 – HaroldSer
我已经这样做了,但后来在回调方法中,设备被视为BaseDevice,因此无法访问PrivilegedDevice中的方法。 – lorenzo