2010-12-16 8 views
6

¿Es posible construir una clase parametrizada en Matlab? Por ejemplo, en Java podría decir ArrayList<String> myList = new ArrayList<String>(). He intentado myList = java.util.ArrayList<String>(), pero eso solo da un error que dice "paréntesis o paréntesis inesperados". Realmente estoy buscando usar mis propias clases parametrizadas, pero si puedo obtener la sintaxis para esto, debería ser suficiente.Uso de clases genéricas de Java en Matlab

Respuesta

5

Usted no puede crear una instancia de una clase Java parametrizada en Matlab. Esto es porque Matlab es un lenguaje interpretado. Por lo tanto, en su ejemplo, cuando intente

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

Matlab interpreta inmediatamente este código y compila el código de Java. Pero como Java tiene Type Erasure, toda la información de tipo de myList se pierde de inmediato. Esto significa que en el contexto de Matlab los parámetros de tipo de sintaxis no tienen sentido, por lo que son sintácticamente inválidos.

+0

Ok, tenía miedo de que ese fuera el caso, pero quería asegurarme. – Sam

+0

Entonces, si construyo un ArrayList en matlab, ¿es posible agregarle un objeto matlab? (Cada vez que intento agregar un objeto, obtengo 'Sin método 'add' con la coincidencia de la firma encontrada para la clase 'java.util.ArrayList''). – dinosaur

1

No soy especialista en Matlab pero entiendo algo en Java.

  1. Generics son compatibles desde java 5
  2. genéricos son función de tiempo de compilación. También se les llama "borrones".

Esto significa que

  1. Comprobar que está instalado Java en su sistema y usada por MATLAB. ¿Probablemente está configurado para usar Java 1.4?
  2. ¿Puedes escribir tu código usando otro IDE (no matlab), compilarlo y luego usarlo en Matlab? Probablemente solucionará tu problema.

En el siguiente enlace, probablemente podría ayudarle: http://www.mathworks.com/support/solutions/en/data/1-1812J/

+0

Su enfoque mencionado en el punto número dos está funcionando. – zellus

5

Kurt tiene razón, sin embargo, una solución sería definir su propia clase Java que no está parametrizada. public class MyList extends ArrayList<String> { }. Luego, en Matlab puede escribir myList = MyList() y obtendrá casi todas las mismas firmas de métodos como ArrayList<String>.

Cuestiones relacionadas