Ich benutze eine Java-öffentliche Schnittstelle in einer Matlab-Skript-Software (aber objektorientiert).Verwendung von Java mit Matlab: Übergabe des Klassentyps als Methodenargument
Wir müssen oft Java-Methoden aufrufen und das funktioniert einwandfrei. Wenn ich die folgende Java-Klasse haben:
package com.toto
public class Foo {
public static void printHello() {
System.out.println("Hello World");
}
}
Dann in Matlab Ich nenne nur:
com.toto.Foo.printHello
Um den Druck in meinem Konsolenbefehl angezeigt zu bekommen.
was Nun würde ich tun möchte, ist etwas Ähnliches wie:
package com.toto
public class Foo {
public static <E> void printClass(Class<E> type) {
System.out.println("My type: " + type);
}
}
public class Goo {
....
}
Und in Matlab:
com.toto.Foo.printClass(com.toto.Goo.class)
das ist eigentlich nicht funktioniert.
Irgendeine Lösung dafür?
Edit: hier ein funktionierendes Java-Beispiel ist, sollte der Code in Haupt unter Matlab ausgeführt werden:
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() {};
}
Das ist eigentlich was ich mache. Ich habe eine statische getDefault() -Methode, weil Goo eigentlich eine Enum ist, also kann ich keinen öffentlichen Konstruktor darin haben. Allerdings bin ich auf Java 1.6, so kann ich weder die Methode getDefault() in einer Schnittstelle noch eine abstrakte Klasse erzwingen. Ich verlasse mich also grundsätzlich auf den guten Willen des Entwicklers, diese Methode zu implementieren. Dies ist, warum ich diese Lösung nicht mag (und dass ich Java auf der Seite wirklich nicht mag). – Zangdar
Die Antwort wurde für Sie aktualisiert. Ich hoffe, es befriedigt Ihre Bedürfnisse. – DVarga
Das ist großartig, MathWorks rät von der Verwendung von forName ab (sie geben an, javaObjectEDT zu verwenden), aber in diesem Fall ist es ein wirklich netter Gebrauch – Zangdar