matlab switch case中的java枚举

Posted

技术标签:

【中文标题】matlab switch case中的java枚举【英文标题】:java enum in matlab switch case 【发布时间】:2015-10-12 12:23:43 【问题描述】:

我目前正在尝试在 Matlab 中使用 Java 包,到目前为止效果很好。但是现在我需要根据 Java 枚举在 Matlab 中做一个 Switch 案例。这里有一个小示例代码:

Java:

package abc;

class Parser 
    enum FileType 
        UNHANDLED,
        XML,
        BINARY
    

    public getFileType()
        this.fileType;
    

    private FileType fileType;


在 Matlab 中,我想做以下事情:

parser = abc.Parser();
Switch (parser.getFileType()) 
      case abc.FileType.BINARY:
            %TODO
      break;

根据using Java enums or public static fields in MATLAB,我可以用

访问枚举元素
javaMethod('valueOf', 'abc.Parser$FileType', 'BINARY');

但如果我在 Switch 案例中使用这一行:

parser = abc.Parser();
Switch(Parser.getFileType())
      case javaMethod('valueOf', 'abc.Parser$FileType', 'BINARY');
            %TODO
      break;

我得到了错误

??? SWITCH 表达式必须是标量或字符串常量。

有没有人可以解决我想要的行为?

【问题讨论】:

【参考方案1】:

您的 java 无法编译。我把java改成:

public class Parser 
    enum FileType 
        UNHANDLED,
        XML,
        BINARY
    

    public FileType getFileType()
        return this.fileType;
    

    private FileType fileType = FileType.XML;

    public Parser()
    

对于开关,我只是比较用 char() 包裹的字符串。

例如:

javaaddpath('/home/shackle/NetBeansProjects/JavaApplication50/dist/JavaApplication50.jar')
import abc.Parser

p = Parser();
switch char(p.getFileType().toString())
    case 'BINARY'
            fprintf('type is binary')
      break;

    case 'UNHANDLED'
            fprintf('type is UNHANDLED')
      break;

    case 'XML'
            fprintf('type is XML')
      break;
end

【讨论】:

以上是关于matlab switch case中的java枚举的主要内容,如果未能解决你的问题,请参考以下文章

matlab中出现case语句错误

java中的switch

Java中的switch-case语句

Java中,switch()括号中的参数是

Java中的switch语句怎么使用

Java中的switch分支注意点