这是问题,我有两个绘图JAR库(A和B)。两者都提供单独但有用的功能。然而,在他们无限的智慧中,他们有两个不同的基本点类概念。
既没有任何有趣或特别独特的方法或领域,也基本归结为:
public class PointA{
double x;
double y;
}
和
public class PointB{
double x;
double y;
}
这些库中的函数具有如下所示的方法:
public static List<PointA> doInterestingThing();
或
public static PointB calculateThatThing();
我觉得应该有一些很好的方法来理解这两个类是针对所有意图的,同样的。
如果我有源访问权限,我可以让它们实现一些IPoint接口,但这两个库都在JARS中。
我看到它的方式有几种选择:
将一个转换为另一个。要么使函数将所有PointA转换为PointB,反之亦然。这意味着基本上在其中一个库上创建一个抽象层,方法是用一些样板转换代码包装其中的每个函数。
public static List<PointA>doInterestingThingWrapper(){
return convertPoints(LibraryB.doInterestingThing());
}
制作一些第三类 PointC,将两个库的结果转换为代表我的代码对点的理解。与上面相同的问题,但现在我需要写两次样板转换!
直接编辑JARS 。显然这不是优选的。但是,它允许我使PointA和PointB实现相同的接口。
一些神奇的动态界面互动我不知道。 可能是Java有一些方法可以动态地为已经加载的类分配接口吗?
类似的东西:
public interface IPoint{
double getX();
double getY();
}
public static void main(){
//Magical made up linking syntax
PointA implements IPoint{
public getX(){
this.getX()//PointA's method
}
public getY(){
this.getY(){//pointA's method
}
}
//And same for pointB
//And now we can say things like:
List<? extends IPoint> listOPoints=A.doInterestingThing();
//and:
IPoint thePoint=B.calculateThatThing();
}
如果这是重复,我会提前道歉。我甚至不知道该怎么称呼这个让搜索变得困难的问题。如果我错过了一些明显的设计模式(适配器模式?)解决了这个问题,请告诉我。
答案 0 :(得分:-1)
你有两个解决方案
使用反射和非反射来使用相同的命名函数。
将项目代码中的两个包装到实现接口的对象中。
样品:
class A { public void d(){}}
class B { public void d(){}}
interface D { void d(); }
class AD extends A implements D {}
class BD extends B implements D {}
或
class AD implements D {A obj = new A(); public void d(){obj.d();}}