2010-12-16 12 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

+0

したがって、私はMatlabでArrayListを構築する場合は、matlabオブジェクトを追加することは可能ですか? (私がオブジェクトを追加しようとするたびに、 'noメソッド 'add'は、クラス 'java.util.ArrayList'に対して一致する署名が見つかりました。) – dinosaur

1

私はMatlabの専門家ではありませんが、私はJavaで何かを理解しています。 Java 5の

  • ジェネリック医薬品は、コンパイル時の機能であるため、

    1. ジェネリックはサポートされています。彼らはまた、 "消しゴム"と呼ばれています。

    それはあなたのシステムにインストールされ、MATLABで使用されるJavaいる

    1. チェックを意味します。おそらくそれはJava 1.4を使用するように構成されていますか?
    2. 他のIDE(matlabではなく)を使ってコードを書いて、コンパイルしてMatlabで使用できますか?おそらくそれはあなたの問題を解決するでしょう。

    次のリンクは、おそらくあなたを助けることができる:http://www.mathworks.com/support/solutions/en/data/1-1812J/

  • +0

    2番の点で述べた方法が有効です。 – zellus

    5

    Kurtが正しいですが、回避策は、パラメータ化されていない独自のJavaクラスを定義することです。 public class MyList extends ArrayList<String> { }。その後、matlabでmyList = MyList()と書くことができ、ほとんどすべてのメソッドシグネチャがArrayList<String>となります。

    関連する問題