4

我有java枚举

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' 枚举值?

附言

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

返回

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

更新

com.moc.MyType.valueOf('p') 有效。但问题对我来说仍然很重要。

4

3 回答 3

2

如本答案中所列,您可能需要以不同的方式引用它。有时 Java 将内容存储为$而不是.,因此如果您按照下面列出的方式进行调用,它应该可以工作。

javaObject('com.moc.MyType$q')
于 2012-12-05T12:09:38.767 回答
1

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

于 2012-11-30T08:14:24.030 回答
1

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

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

如果它确实有效,那么我错了。如果没有,那么您需要通过编译/jar'ing/加载过程来查看您在哪里有一个陈旧的文件。

于 2012-11-30T17:23:34.590 回答