这一切都在 JBox2D 的上下文中(在 Java 中)。World 类使用函数创建 Body 实例。我正在尝试为我的应用程序向 Body 添加更多内容。在这个问题中,主体由 ComplexClassWithLotsOfAPI 表示。
这是一个笼统的问题。我试图通过扩展类来为预制类添加更多功能。我希望做这样的事情:
class SomeMore extends ComplexClassWithLotsOfAPI{
int myExtraInt;
//A bit more API functions
}
这样我就可以这样做:
SomeMore sm=new SomeMore();
sm.someOldAPI();
sm.butAlsoMyNewAPI();
问题是这个 ComplexClassWithLotsOfAPI 是由另一个我无法修改的类(原始上下文中的 World 类)创建的,所以我不是简单地自己创建它们(否则这会起作用)。由于我不得不从 ComplexClassWithLotsOfAPI 开始,我一直在寻找一种从 SuperClass构造SubClass 的方法,而有许多将 SuperClass转换为 Subclass 的示例(但这在这里不适用)。下面是一个需要完成的功能示例:
public SomeMore create(...){
ComplexClassWithLotsOfAPI ccwlao=myWorld.create(...);
SomeMore sm;
//??
return sm;
}
包装的替代品? 我最初的解决方案是将 ComplexClassWithLotsOfAPI 封装到我自己的类中。为了构造我的新类,我只需将旧类传递给我的新构造函数并继续:
class SomeMore{
public ComplexClassWithLotsOfAPI ccwloa;
int myExtraInt;
public SomeMore(ComplexClassWithLotsOfAPI nccwloa){
ccwloa=nccwloa;
myExtraInt=0;
}
//A bit more API functions
}
public SomeMore create(...){
ComplexClassWithLotsOfAPI ccwlao=myWorld.create(...);
SomeMore sm=new SomeMore(ccwlao);
return sm;
//OR more simply
//return new SomeMore(myWorld.create(...));
}
但为了访问旧 API,我需要这样做:
SomeMore sm=new SomeMore();
sm.ccwloa.someOldAPI();
sm.butAlsoMyNewAPI();
我可能有点不合理,但是这种功能很乏味,并且给不需要它的东西增加了更多的复杂性。我的意思是,如果有人想添加更多功能,他们会将我的类包装到另一个类中,并通过 3 个类层次结构来获取旧 API?此外,将旧类中的每个 API 都包装到我的新类中会感觉很浪费(其中有很多)。
sm.someOldAPIButWrappedInMyClass(); //not desirable
我无法访问 ComplexClassWithLotsOfAPI 的 java 文件,只能访问已编译的类文件。我不能简单地将我的修改强加到旧类中(即使可以,我也不想这样做)。我对java比较陌生,所以也许这不是最好/正确的方法,但我一直无法找到替代方法。