如何使用(la4j库的)抽象迭代器?

时间:2017-09-29 11:49:42

标签: java iterator abstract-class libraries la4j

说出我的问题有点难。我目前在java中使用库时遇到了很多困难,而且往往不确定如何有效地使用它们。从理论上讲,我知道界面和抽象类是什么,但实际上这些东西对我来说很难使用。 因此,更具体地说,例如,在我使用la4j库中的CCS矩阵的那一刻。我现在想迭代它(每行中的行和每个条目)并想要使用它,但我只找到抽象迭代器(例如RowMajorMatrixIterator)。一般来说:我不知道如何处理来自库的抽象类(或接口)。特别是在这个时刻,作为我的问题的典型实例:如果我有这个抽象迭代器,我如何实际使用它(对于我的CCS矩阵)? 感谢每一位帮助!

1 个答案:

答案 0 :(得分:2)

您从事先创建的矩阵中获取迭代器:类Matrix定义了一个方法rowMajorIterator(),例如,您可以这样做

RowMajorMatrixIterator it = yourMatrix.rowMajorIterator();

此模式称为"工厂方法"。

正如托马斯指出的那样,它通常被实现为某种内部类,如下所示:

public class MyMatrix extends Matrix {
    public RowMajorIterator rowMajorIterator() {
        return new RowMajorIterator() { // anonymous class
            // needs to implement the abstract methods
            public int get() { ... } 
            ...
        }
    }
}

public class MyMatrix extends Matrix {
    public RowMajorIterator rowMajorIterator() {
        return new MyRowMajorIterator();
    }
    class MyRowMajorIterator extends RowMajorIterator { // inner, named class
        // needs to implement the abstract methods
        public int get() { ... } 
        ...
    }
}

这些内部类可以访问"外部"的成员。班Matrix