繁体   English   中英

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

[英]Using Java with Matlab: passing Class type as a method 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() {};
 }  

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

com.toto.Goo.class

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

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

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

这个功能的主要部分是

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

它使用ClassforName方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM