我目前正在开发基于两种变体的Android SDK,基本变体(针对第三方开发人员)和特权变体(将在内部使用)。
特权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);
}
但我无法使用deviceConnected
中PrivilegedDevice
的其他参数覆盖PrivilegedInterface
。
我的另一个想法是利用构建风格来隐藏功能,但这似乎也不合适。
有什么想法吗?
答案 0 :(得分:0)
在界面中创建一个额外的方法:(这是方法重载的概念)
public interface BaseInterface {
void deviceConnected(BaseDevice baseDevice);
void deviceConnected(PrivilegedDevice privilegedDevice);
}
答案 1 :(得分:0)
我认为你需要抽象掉设备类。
public interface Device {
void deviceConnected();
}
public class BaseDevice implements Device {
BaseDevice() {
}
void deviceConnected() {
}
}
public class PrivilegedDevice implements Device {
PrivilegedDevice() {
}
void deviceConnected() {
}
}
答案 2 :(得分:0)
这可能无法解决将来遇到同样问题的人的问题,但整体问题与我的课程的层次结构及其内部部分有关。
我能够将一些内容移动到BaseAPI
中,摆脱BaseDevice
内部使用的类,并且基本上以更合理的方式重构事物。最终结果是我的类少了一些类和更合理的结构。
代码气味是我的代码中有一些过于复杂的部分的结果。