我在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() {};
}
答案 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
语法的等效方法。