我有一个类ImageA和一个类ImageB。这两个类都代表我的应用程序中的图像,但是每个类以不同的方式表示。即使是不同的,它们的构造函数也是相等的,并且都具有比较方法。
因此,我要做的是创建一个Image类,而ImageA和ImageB是Image的子类。
public abstract class Image {
protected String path;
public Image(String path){
this.path = path;
}
public abstract double compare(Image i2);
}
public class ImageA extends Image{...}
public class ImageB extends Image{...}
但是我需要的是测试图像的每种实现(在本例中为ImageA和ImageB),以查看最佳的实现。
有办法做到这一点,至少更改我的代码吗?假设使用的对象来自ImageA类,现在我要测试imageB类;
观测值:
如果我的应用程序的所有imageA对象都是
由类型设置(ImageA i =新
ImageA()),我必须更改
手动全部在代码中。
但是即使我使用superType和
投放(图片i =(ImageA)新
Image()),我会有同样的问题,
改变演员表。
我的问题与此不同:Refactoring abstract Java class with many child classes。就我而言,子类内部的属性是不同的,我将这些类的公共属性保留在Image类中。
最佳答案
您可以使用以下方法创建工厂并将工厂的实例传递到测试类中:
Image img = factory.newInstance(args);
在您的测试代码中。工厂确定使用哪种类型的ImageA或ImageB。另一种选择是在您的
abstract Image newInstance(args)
类中有一个Image
并在您的子类中实现它。在这种情况下,您需要将第一个图像实例注入测试类。两种方法都基于这样的事实:两种图像类型之间的arg相同,因此您可能需要传入一个超集来实现两种构造函数。