2012-11-27 1 views
4

У меня есть Java перечислениеMatlab java interop. Используйте перечисление значений

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

В MatLab (2012a) я загрузить соответствующую банку, и установить

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

Он работает хорошо. Но когда я пытаюсь Eval

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 DISALLOW меня, чтобы получить 's' и 'p' перечислены значения?

P.S.

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

возвращает

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

UPDATE

com.moc.MyType.valueOf ('р') работает. Но вопрос остается актуальным для меня.

ответ

1

Хм, это должно сработать. Я просто догадываюсь, но вы можете попробовать с константами перечисления верхнего регистра (например, com.moc.MyType.P). Может быть, происходит какое-то неряшливое состояние, основанное на согласии.

1

Я действительно подозреваю, что это ошибка конфигурации. (То, что я использовал для вызова make-файла). То есть, я подозреваю, что код, который вы фактически загружаете в Matlab, не связан с кодом Java, который вы пишете, но является более старой версией.

Чтобы подтвердить или опровергнуть этот вид ошибки, сделайте минимальное изменение, которое будет отображаться при выполнении. Например, измените q на qq и подтвердите, что a = com.moc.MyType.qq; работает в Matlab.

Если это действительно работает, то я ошибаюсь. Если это не так, вам нужно пройти процесс компиляции/jar'ing/loading, чтобы увидеть, где у вас есть устаревший файл.

+0

Спасибо. Но почему «com.moc.MyType.q» работает и «com.moc.MyType.p» нет? – user1312837

2

Как указано в this answer, вам может потребоваться ссылка на него несколько иначе. Иногда Java хранит вещи как $ вместо ., поэтому, если вы выполните вызов, как указано ниже, он должен работать.

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

Спасибо. Но почему «com.moc.MyType.q» работает и «com.moc.MyType.p» нет? – user1312837

+0

Я точно не уверен, но я подозреваю, что это связано с тем, что это первое значение перечисления. По той же причине может работать и последняя, ​​но все в середине не будет работать вообще. – PearsonArtPhoto

Смежные вопросы