1

我有一个非常大且臃肿的类,我想将它拆分为单独的文件,但它应该对用户完全透明,并且与使用该类的现有项目兼容。

特别是我有自己的ImageMatrix类,它定义了大量的一元函数、大量带有标量的二进制函数、大量带有另一个图像的二进制函数等。为了保持类的清洁和可维护性,我希望将每个类运算符在一个单独的文件中。

有没有办法将这些方法剪切/粘贴到文件中并将它们包含在源代码中?

所以我希望我仍然可以这样做,但这些方法实际上驻留在不同的文件中:

    ImageMatrix img = new ImageMatrix(800, 600, 3);
    img.clear(0.5f, 0.0f, 0,0f);
    img.addSelf(anotherImg);
    img.normalize();
    img.abs();
    img.addSelf(0.5);

每个方法大约有 15-30 行代码,因为这些实现对性能进行了极大的优化,而使用 Bufferedimage 甚至是普通的 int[] 都无法实现类似的效果。有很多代码重复,这是将类似方法组合在一起的主要原因。如果我添加一个函数或者我改变了全局行为(比如错误检查),我可以很容易地保持事情的连贯性。

4

4 回答 4

2

不幸的是,不能将 Java 类定义拆分为多个文件。

尝试重构您的代码,以便不需要庞大的类定义。这通常意味着通过 getter 和 setter 方法公开一些状态,并编写使用这些方法向主类添加功能的支持类。

在您的情况下,您可能会考虑添加支持类,例如,如果您喜欢非常小的类ImageFilters,甚至可以考虑添加更窄的类。ImageNormalizer

于 2012-04-05T08:36:48.603 回答
1

您不能跨文件拆分 java 类。您可以做的是,如果您的每个方法都是自包含的,您可以使用静态方法创建类。所以在某种程度上,你需要做的就是剪切和粘贴代码。

于 2012-04-05T08:39:49.310 回答
1

好吧,您可以创建一个更通用的类并在其中放置更多通用方法,然后ImageMatrix扩展该类。此外,如果您有很多矩阵操作函数,您最终可能会出现大量代码重复,即在不同的方法中重复相同的代码,而不是将公共代码移动到辅助方法中并从不同的地方调用它等。

于 2012-04-05T08:40:56.487 回答
1

您还可以使用委托方法。这意味着您的方法的定义仍在 中ImageMatrix,但它们在另一个类中实现。根据您方法的复杂性,这可能会减少ImageMatrix.

class ImageMatrix {

    MatrixHelperOne helperOne = new MatrixHelperOne();

    ...

    public void complexMethod1(Arg arg) {
        helperOne.complexMethod1(arg);
    }

    ...
}
于 2012-04-05T08:47:11.647 回答