2016-04-28 4 views
1

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()     
     ); 
+2

'Test []' ist nicht verwandt mit 'Object []': Sie können nicht zwischen den beiden umwandeln. Beachten Sie auch, dass '.toArray()' immer 'Object []' zurückgibt. –

+2

Related: http://stackoverflow.com/questions/5690351/java-stringlist-toarray-gives-classcastexception –

+2

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

Antwort

Verwandte Themen