我正在开发基于开源项目的应用程序。我们付钱给开发人员,让他们根据他们的代码制作我们自己的封闭源代码应用程序。我们确实希望与原始软件包保持兼容,安全性和功能更新将与我们的应用程序合并。
当然,如果我大量修改原始代码,这里最大的问题是与新更新的合并。我在网上搜索了最佳的解决方案和他人之间,我发现喜欢的网站这一个。所以我决定尽可能不修改原始代码。如果我想向现有特性添加功能,我会扩展原始类,使应用程序指向我的扩展类(这是一个足够小的修改,不会成为问题),然后实现我的更改。
这里的问题是第 3 方类中的属性属于我也想扩展的类型。在下面的示例class A中,对myClass我希望它继续执行的属性进行了一些修改。但是class B,其 extends class A,包含一个具有扩展MyClass自身类型的属性,这里是MyCustomClass。在内部,class B我希望该属性myCustomClass是 的扩展myClass,对所做的任何更改都myClass应该可以在myCustomClass.
据我所知,不可能强制myClass转换myCustomClass为,因为myClass根本不是 type myCustomClass。那么这里最好的解决方案是保持兼容性class A并且不涉及仅仅复制所有代码,class A因为如果class A获得更新会产生完全相同的问题?
这里有一些示例代码可以更好地解释我的问题:
// Classes 'A' and 'MyClass' are 3rd party, I do not want to edit them
public class A {
private MyClass myClass;
A(){
myClass = new MyClass();
// Changes I want to keep doing
doSomething();
}
public void doSomething(){
// Do some calculations to myClass and modify it accordingly
}
public MyClass getMyClass(){
return myClass
}
}
// Classes 'B' and 'MyCustomClass' are 1st party, I can do anything I want with them :)
public class B extends A{
private MyCustomClass myCustomClass;
B(){
super();
myCustomClass = ?????????;
// Extremely important message, this should keep working
System.out.println(myCustomClass.verySpecialString);
// Build further on made modifications, this should keep working too
useModificationsByClassA();
}
public void useModificationsByClassA(){
// Use result of class A's calculations in order to continue
}
}
public class MyCustomClass extends MyClass{
private String verySpecialString;
MyCustomClass(){
super();
verySpecialString = "Hey!";
}
}
RISEBY
一只名叫tom的猫
相关分类