我有一个类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相同,因此您可能需要传入一个超集来实现两种构造函数。

08-16 08:32