有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java如何使用enum收集类?

假设我有很多矩阵的实现(它们不会从一个扩展到另一个),我希望用户能够看到所有不同的类,以某种枚举或其他方式收集它们,我该怎么做? 它不必是菜单或其他什么,这样我就可以看到所有的类,就像enum一样

例如:

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

而主矩阵是所有矩阵的公共接口

我可以使用enum创建与我将选择的选项匹配的新类的实例吗? 例如:

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

我能做到吗


共 (4) 个答案

  1. # 1 楼答案

    您可以通过Reflections库以编程方式实现这一点

    例如:

    Reflections reflections = new Reflections(...); //see in other use cases
    Set<Class<? extends MainMatrix>> subTypes =
        reflections.getSubTypesOf(MainMatrix.class);
    
  2. # 2 楼答案

    我想这可能是你想要尝试的:

    public enum Matricies {
    
        DIAGONAL_MATRIX(new DiagonalMatrix()),
        OTHER_MATRIX(new OtherMatrix(4, 4));
    
        private MainMatrix value; // each value of the enum has a value which is an instance of a matrix
    
        Matricies(MainMatrix val) { // enum constructor to set instance of matrix
            value = val;
        }
    
        public MainMatrix getValue() {
            return value;
        }
    }
    

    要获取对角矩阵的实例:

    MainMatrix diagMatrix = Matricies.DIAGONAL_MATRIX.getValue();
    
  3. # 3 楼答案

    一种方法是在枚举中有一个方法来创建矩阵(主要基于您已经编写的内容):

    public enum Matrices{
        DIAGONAL_MATRIX {
            @Override
            public MainMatrix createMatrix() {
                return new DiagonalMatrix();
            }
        },
        OTHER_MATRIX {
            @Override
            public MainMatrix createMatrix() {
                return new OtherMatrix();
            }
        },
        ...
        ;
    
        public abstract MainMatrix createMatrix();
    }
    

    编辑:
    只需调用createMatrix方法为给定的枚举创建一个矩阵:

    Matrices type = ...
    MainMatrix matrix = type.createMatrix();
    

    或者直接

    MainMatrix matrix = DIAGONAL_MATRIX.createMatrix();
    
  4. # 4 楼答案

    1. 在Eclipse中编写上述代码
    2. 将光标放在文本MainMatrix
    3. F4

    F4是打开“类型层次结构”视图的Eclipse快捷方式。这将显示当前选定类型的所有子类型