gpt4 book ai didi

Java-如何使用枚举收集类?

转载 作者:行者123 更新时间:2023-12-04 20:51:30 25 4
gpt4 key购买 nike

让我们假设我有很多矩阵的实现(它们不会从一个扩展到另一个)并且我希望用户能够看到所有不同的类,将它们收集在某种枚举或其他东西中,我怎样才能做到这一点?它不必是菜单或其他东西,这样我就可以看到所有类,就像枚举一样。

例如:

MainMatrix matrix= new (ALL THE POSSIBILITIES)();

而 MainMatrix 是所有矩阵的通用接口(interface)。

我可以使用枚举来创建与我选择的选项相匹配的新类实例吗?例如:

public enum Matrices{
DIAGONAL_MATRIX(new DiagonalMatrix());
..
..
}

我可以吗?

最佳答案

这里是一个使用带有抽象方法的枚举的解决方案:

public enum MatrixFactory {

/**
* Creates a diagonal matrix
*
* args[0] : a double[] with the diagonal values
*/
DIAGONAL_MATRIX {
@Override
public MainMatrix create(Object[] args) {
double[] diagonal = (double[]) args[0];
return new DiagonalMatrix(diagonal);
}
},

/**
* Creates a full matrix
*
* args[0] : the number of rows
*
* args[1] : the number of columns
*/
FULL_MATRIX() {
@Override
public MainMatrix create(Object[] args) {
int rows = (Integer) args[0];
int cols = (Integer) args[1];
return new FullMatrix(rows, cols);
}
};

public abstract MainMatrix create(Object[] args);
}

用法:

MatrixFactory.DIAGONAL_MATRIX.create(new Object[] {new double[] {1.0, 2.0, 3.0}});
MatrixFactory.FULL_MATRIX.create(new Object[] {4, 4});

另见 classic enum tutorial它用算术枚举说明了这一点:

public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x / y; } };

// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}

虽然我提倡使用常规工厂,因为用法更清晰。在这种情况下,使用枚举不会增加我能想到的任何好处。

public class MatrixFactory {

/**
* Creates a diagonal matrix
*
* @param diagonal the diagonal values
* @return
*/
public static MainMatrix diagonalMatrix(double[] diagonal) {
return new DiagonalMatrix(diagonal);
}

/**
* Creates a full matrix
*
* @param rows the number of rows
* @param cols the number of columns
* @return
*/
public static MainMatrix fullMatrix(int rows, int cols) {
return new FullMatrix(rows, cols);
}
}

用法:

MatrixFactory.diagonalMatrix(new double[] {1.0, 2.0, 3.0});
MatrixFactory.fullMatrix(4, 4);

关于Java-如何使用枚举收集类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com