poster
2019-12-10, 16:49
我想知道如何在MATLAB中获得对Java enum或静态公共字段的引用。在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:?????
回答:
您可以像其他任何静态Java字段一样,使用package.class.FIELD语法从Matlab引用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();
更多&回答... (https://stackoverflow.com/questions/1223795)
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:?????
回答:
您可以像其他任何静态Java字段一样,使用package.class.FIELD语法从Matlab引用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();
更多&回答... (https://stackoverflow.com/questions/1223795)