Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中使用Java枚举或公共静态字段

我想知道如何在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();

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:37


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.