Ich versuche, ein Array mithilfe von Lambda-Ausdrücke zu instanziieren.initialisieren Sie ein Array mithilfe von Casted Lambda-Ausdrücken
der Code, den ich zu verwenden Ich versuche ist:
public class Main {
static int x = 0;
public static void main(String[] args) {
Test[] t = (Test[]) Stream
.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
);
der Klasse I Test genannt zu instanziiert bin versucht wird:
public class Test {
int a, b;
Test(int a, int b) {
this.a = a;
this.b = b;
}
}
ich die Besetzung nicht durchführen kann, ist es eine Ausnahme auslöst:
java.lang.ClassCastException: [Ljava.lang.Object; kann nicht in umgewandelt werden [Lperson.Test; bei person.Main.main (Main.java:37) Java zurückgegeben: 1
Aber wenn Sie die Objektklassen zu buchen:
Das Array ist ein "[Ljava.lang.Object;" Beispiel
//class "[Ljava.lang.Object;"
System.out.println(
Stream.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
.toArray().getClass()
);
Jedes Objekt des Arrays ist ein „Test“ Instanz
//class "Test"
System.out.println(
Stream.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
.toArray()[0].getClass()
);
'Test []' ist nicht verwandt mit 'Object []': Sie können nicht zwischen den beiden umwandeln. Beachten Sie auch, dass '.toArray()' immer 'Object []' zurückgibt. –
Related: http://stackoverflow.com/questions/5690351/java-stringlist-toarray-gives-classcastexception –
Neben Ihrem Hauptproblem, sollten Sie beachten, dass 'Stream.generate' erstellt einen * ungeordneten * Stream, was passiert, was zu tun Sie beabsichtigen mit einem sequentiellen Stream, garantieren dies aber nicht. Außerdem ist der Missbrauch von 'map' zum Ändern des Objekts ein entmutigter Programmierstil ... – Holger