我在 matlab 脚本(但面向对象)软件中使用 java 公共(public)接口(interface)。
我们经常需要调用 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() {};
}
最佳答案
这里的问题是 .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());
它使用 forName 类
的方法:
Returns the Class object associated with the class or interface with the given string name, using the given class loader.
这第二种方法可以用作 Java .class
语法的等价物。
关于java - 将 Java 与 Matlab 一起使用 : passing Class type as a method argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273129/