$在Java中包含#include等价物?

时间:2012-04-05 08:34:56

标签: java

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

特别是我有自己的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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

class ImageMatrix {

    MatrixHelperOne helperOne = new MatrixHelperOne();

    ...

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

    ...
}