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' 列挙値を取得できないのはなぜですか?

PS

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 コードにリンクされておらず、古いバージョンであると思われます。

この種のエラーを確認/反論するには、実行時に表示される最小限の変更を行います。たとえば、Matlab で動作するように変更qqqて確認します。a = com.moc.MyType.qq;

それが機能する場合、私は間違っています。そうでない場合は、コンパイル/jar'ing/loading プロセスを実行して、古いファイルがどこにあるかを確認する必要があります。

于 2012-11-30T17:23:34.590 に答える