我想知道如何在MATLAB中获得对Java enum或静态公共(public)字段的引用。在MATLAB中,如果您尝试使用Java对象/方法,则等效于Java对象创建/方法调用/等:

Java:new com.example.test.Foo();
MATLAB:javaObject('com.example.test.Foo');
Java:com.example.test.Foo.staticMethod();
MATLAB:javaMethod('staticMethod', 'com.example.test.Foo');
Java:SomeEnum e = com.example.test.SomeEnum.MY_FAVORITE_ENUM;
MATLAB:?????

Java:int n = com.example.test.Foo.MAX_FOO;

MATLAB:?????

最佳答案

您可以使用package.class.FIELD语法从Matlab引用Java枚举常量,就像其他任何静态Java字段一样。假设您有一个枚举。

package com.example;
public enum MyEnum {
    FOO, BAR, BAZ
}

您可以使用直接引用在Matlab中获取枚举常量。 (当然,Java类必须位于Matlab的javaclasspath中。)
% Static reference
foo = com.example.MyEnum.FOO

% Import it if you want to omit the package name
import com.example.MyEnum;
foo = MyEnum.FOO
bar = MyEnum.BAR

如果要在运行时确定“动态”引用,则可以仅构建一个包含等效静态引用的字符串,并将其传递给eval()。这适用于几乎所有的Matlab代码。
% Dynamic reference
foo = eval('com.example.MyEnum.FOO')

而且,如果您真的想花哨的话,可以使用Java反射在运行时获取所有枚举的常量。做一个薄包装,与您的其他自定义类一起使用,以避开Matlab的类加载器的怪癖。 (没有等效的Matlab javaClass();恕我直言,这是Matlab的监督。)
//In Java
package com.example;
public class Reflector {
    public static Class forName(String className) throws Exception {
        return Class.forName(className);
    }
}

然后,您可以在Matlab中枚举常量。
% Constant enumeration using reflection
klass = com.example.Reflector.forName('com.example.MyEnum');
enums = klass.getEnumConstants();

关于java - 在MATLAB中使用Java枚举或公共(public)静态字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1223795/

10-15 05:53
查看更多