2010-12-16 73 views
6

是否有可能在Matlab中构造一个参数化类?例如在Java中,我可以说ArrayList<String> myList = new ArrayList<String>()。我试过myList = java.util.ArrayList<String>(),但这只是给出了一个错误,说“意外的括号或括号”。我真的希望使用我自己的参数化类,但是如果我能够得到这个语法,就足够了。在Matlab中使用Java泛型类

回答

5

你不能在Matlab实例化一个参数化的Java类。这是因为Matlab是一种解释型语言。因此,在你的例子中,当你尝试

myList = java.util.ArrayList<String>() 

该代码立即解释并运行Matlab(和Java代码编译)。但是因为Java有Type Erasure myList的所有类型信息都会立即丢失。这意味着在Matlab的语法类型参数中没有任何意义 - 所以它们在语法上是无效的。

+0

好吧,我很害怕这种情况,但我想确认一下。 – Sam 2010-12-16 17:53:07

+0

所以,如果我在matlab中构造一个ArrayList,是否可以添加一个matlab对象? (每次我尝试添加一个对象时,我都会得到'No method'添加',并为类 'java.util.ArrayList'.'找到匹配的签名) – dinosaur 2015-12-17 02:32:59

1

我不是Matlab专家,但我理解java中的一些东西。

  1. 泛型支持由于Java 5
  2. 泛型是编译时的功能。它们也被称为“擦除”。

这意味着

  1. 检查其Java是安装在系统上,并通过MATLAB使用。可能它被配置为使用java 1.4?
  2. 你可以使用其他IDE(不是matlab)编写代码,编译它们然后在Matlab中使用吗?可能它会解决你的问题。

以下链接也许可以帮助你:http://www.mathworks.com/support/solutions/en/data/1-1812J/

+0

您在第二点提到的方法正在工作。 – zellus 2010-12-16 19:09:57

5

Kurt是正确的,但是一种解决方法是定义你自己的java类,它没有参数化。 public class MyList extends ArrayList<String> { }。然后在matlab中,您可以编写myList = MyList(),您几乎可以获得与ArrayList<String>相同的方法签名。