0

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

4

1 回答 1

2

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

RowMajorMatrixIterator it = yourMatrix.rowMajorIterator();

这种模式称为“工厂方法”。

正如 Thomas 所指出的,它通常被实现为某种内部类,如下所示:

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

于 2017-09-29T11:56:23.790 回答