java - 在 Java 中更改类

标签 java inheritance refactoring multiple-inheritance

我有一个 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 = new ImageA()), 我必须改变 手动全部在代码中。

  • 但即使我使用 superType 和 施放它(图片 i = (ImageA)new Image()), 我也会有同样的问题, 更改类型转换。

  • 我的问题与这个问题不同:Refactoring abstract Java class with many child classes。在我的例子中,子类中的属性是不同的,我在 Image 类中保留了这些类的共同属性。

最佳答案

您可以创建一个工厂并将您的工厂实例传递到测试类中,使用:

Image img = factory.newInstance(args);

贯穿你的测试代码。工厂决定使用哪种类型的 ImageA 或 ImageB。另一种方法是在您的 Image 类中有一个 abstract Image newInstance(args) 并在您的子类中实现它。在这种情况下,您需要将第一个图像实例注入(inject)到您的测试类中。

这两种方法都依赖于您的参数在两种类型的图像之间是相同的这一事实,您可能需要传入一个超集来实现这两种构造函数。

关于java - 在 Java 中更改类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199966/

相关文章:

java - 下面的代码是什么意思?

java - 如何从另一个类的方法中获取变量值

java - 如何将祖先复制到后代

ruby-on-rails - 从字符串中删除引号,以便我可以将其添加到 Controller 操作中

clojure - 从文件中重构 Clojure 函数

java - 在 gwt 中设置映射的所有内容时遇到一些严重问题(用 java 编程)

java - float 和非 float 的正则表达式,后跟单词

java - 自动调用父类(super class)方法

c++ - virtual 关键字的使用 VS 在 C++ 中简单重定义

c - C中查询字符串的优雅解析