2010-12-16 15 views
6

Czy możliwe jest skonstruowanie sparametryzowanej klasy w Matlab? Na przykład w Javie mógłbym powiedzieć: ArrayList<String> myList = new ArrayList<String>(). Próbowałem myList = java.util.ArrayList<String>(), ale to po prostu daje błąd mówiąc "nieoczekiwany nawias lub nawiasu". Naprawdę staram się korzystać z własnych sparametryzowanych klas, ale jeśli mogę uzyskać składnię do tego, to powinno wystarczyć.Korzystanie z ogólnych klas Java w Matlab

Odpowiedz

5

Nie można instancji sparametryzowanego klasy Java w Matlab. Dzieje się tak, ponieważ Matlab jest językiem interpretowanym. Tak więc w twoim przykładzie, kiedy próbujesz, kod ten jest natychmiast interpretowany i uruchamiany przez Matlab (i skompilowany kod Java). Ale ponieważ Java ma Type Erasure wszystkie informacje o typie dla myList są natychmiast tracone. Oznacza to, że w kontekście parametrów typu składni Matlab nie ma sensu - są więc syntaktycznie nieważne.

+0

OK, bałem się, że tak było, ale chciałem się upewnić. – Sam

+0

Więc jeśli skonstruuję ArrayList w programie Matlab, czy możliwe jest dodanie do niego obiektu Matlaba? (Za każdym razem, gdy próbuję dodać obiekt, otrzymuję komunikat "Brak metody" dodaj "z pasującym podpisem dla klasy " java.util.ArrayList'. ") – dinosaur

1

Nie jestem specjalistą w Matlabie, ale rozumiem coś w języku Java.

  1. Leki generyczne są obsługiwane ponieważ Java 5
  2. Leki generyczne są kompilacji funkcja czasu. Są one również nazywane "wymazaniami".

To oznacza, że ​​

  1. Sprawdź, które Java jest zainstalowana na komputerze i wykorzystywane przez Matlab. Prawdopodobnie jest skonfigurowany do używania java 1.4?
  2. Czy możesz napisać kod używając innego IDE (nie matlab), skompilować go i użyć w Matlab? Prawdopodobnie to rozwiąże twój problem.

Poniższy link prawdopodobnie mógłby pomóc: http://www.mathworks.com/support/solutions/en/data/1-1812J/

+0

Twoje podejście, o którym mowa w punkcie drugim, działa. – zellus

5

Kurt ma rację, jednak rozwiązaniem będzie zdefiniowanie własnej klasy Java, która nie zostanie sparametryzowana. public class MyList extends ArrayList<String> { }. Następnie w Matlab można napisać myList = MyList(), a otrzymasz prawie wszystkie z tych samych metod podpisów jak ArrayList<String>.

Powiązane problemy