Matlab java互操作。使用枚举值

时间:2012-11-27 06:51:46

标签: java matlab

我有java enum

package com.moc;
public enum MyType {
    s,
    q,
    p,
    none,
}

在matlab(2012a)中,我加载了适当的jar,然后设置

a = com.moc.MyType.q;
a = com.moc.MyType.none;

它也有效。但是当我试着评估

a = com.moc.MyType.s;

a = com.moc.MyType.p;

我得到了一个例外

The class com.moc.MyType has no property or method named 's'.

The class com.moc.MyType has no property or method named 'p'.

为什么matlab不允许我获取's'和'p'枚举值?

P.S。

a = com.moc.MyType.q;
a.getClass.getDeclaredField('p')

返回

public static final com.moc.MyType com.moc.MyType.p

更新

com.moc.MyType.valueOf('p')有效。但问题仍然适合我。

3 个答案:

答案 0 :(得分:2)

this answer中所列,您可能需要稍微改一下它。有时Java将事物存储为$而不是.,因此如果您按下面列出的那样进行调用,它应该可以正常工作。

javaObject('com.moc.MyType$q')

答案 1 :(得分:1)

嗯,这应该有效。我只是在猜测,但是你可以尝试使用大写的枚举常量(例如com.moc.MyType.P)也许有一些草率的东西依赖于惯例。

答案 2 :(得分:1)

我真的怀疑这是配置错误。 (我以前称之为makefile错误)。也就是说,我怀疑您实际加载到Matlab中的代码没有链接到您正在编写的Java代码,但它是旧版本。

要确认/反驳此类错误,请执行您可以执行的最小更改。例如,将q更改为qq并确认a = com.moc.MyType.qq;在Matlab中有效。

如果确实有效,那我就错了。 如果没有,那么你需要完成编译/ jar'ing /加载过程,看看你有一个陈旧的文件。