Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我想知道如何在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(); 更多&回答... |
![]() |
![]() |