在Matlab中使用Java:将Class类型作为方法参数传递

时间:2016-09-01 13:39:46

标签: java matlab class generic-type-argument

我在matlab脚本(但面向对象)的软件中使用java公共接口。

我们经常需要调用java方法,这项工作完美无瑕。如果我有以下java类:

package com.toto

public class Foo {
    public static void printHello() {
        System.out.println("Hello World"); 
    }
}

然后在Matlab中我打电话:

com.toto.Foo.printHello

要在我的控制台命令中显示打印件。

现在我想做的是类似的事情:

package com.toto

public class Foo {
    public static <E> void printClass(Class<E> type) {
        System.out.println("My type: " + type); 
    }
}

public class Goo {
....
}  

在Matlab中:

com.toto.Foo.printClass(com.toto.Goo.class)

实际上哪个不起作用。

对此有何解决方案?

编辑:这是一个有效的java示例,main中的代码应该在matlab下执行:

public class Test
{
  public static void main(String[] args)
  {
    Foo.printClass(Goo.class);
  }
}

public class Foo 
{
    public static <E> void printClass(Class<E> type) 
    {
        System.out.println("My type: " + type); 
    }
}

 public class Goo {
    public Goo() {};
 }  

1 个答案:

答案 0 :(得分:1)

这里的问题是.class语法在Matlab中无效:

com.toto.Goo.class

您可以做的是创建Goo的实例,然后在该对象上使用getClass方法:

goo = com.toto.Goo();
com.toto.Foo.printClass(goo.getClass());

或者,如果您只想使用Java类的名称(或者例如在Java enum的情况下无法实例化),您可以使用javaclass中的undocumentedmatlab.com }。

此功能的主要部分是

jclass = java.lang.Class.forName('com.toto.Goo', ...
    true, ...
    java.lang.Thread.currentThread().getContextClassLoader());

使用Class的{​​{3}}方法:

  

返回与类或接口关联的Class对象   给定的字符串名称,使用给定的类加载器。

第二种方法可以用作Java .class语法的等效方法。