2016-10-13 2 views
-1

Ich spiele um mit der Nummer-Wrapper von Java und ich bekam die folgende Fehlermeldung, wenn ich eine Nummer [] zu werfen versucht, Byte []: [ Byte:Wie kann ich java.lang.Number [] in java.lang.Byte [] umwandeln?

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Cannot cast from Number[] to byte[] 
    Type mismatch: cannot convert from byte[] to Byte[] 

Der Code bricht es eingeschaltet ist ] Koordinaten;

ByteVector(Number... coordinates) { 
    super(coordinates); 
    this.coordinates = (Byte[])coordinates; 
} 

Wie kann ich dies schreibe, so dass ich Eingang kann ein Array von jeder Art von Anzahl und wirft es auf ein Array von Byte?

Der Konstruktor wird mit new ByteVector(1,2); genannt, so

+0

Sie möchten 'Number []' in 'byte []' richtig konvertieren? –

+0

Ich kann nicht nach Byte [] umwandeln, da es ein primitiver Typ ist, also dachte ich, ich könnte es in seine Wrapperklasse umwandeln. – Friso

+1

haben Sie sich mit 'Number.byteValue()' angeschaut? https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html#byteValue() – Ash

Antwort

3

Sie können keine Arrays aus einem einfachen Grund werfen: Es ist nicht sicher.

Beispiel
Number[] numbers = new Number[10]; 
numbers[0] = new Byte(10); 
numbers[1] = new Byte(11); 
Byte[] bytes = (Byte[]) numbers; 
numbers[2] = new Double(0); 

Also, wenn dies erlaubt würde, gäbe es jetzt eine Doppel [] im Byte sein - nicht passieren kann! Und das ist tatsächlich wahr andersrum auch:

Byte[] numbers = new Byte[10]; 
numbers[0] = new Byte(10); 
numbers[1] = new Byte(11); 
Number[] bytesNumbers = (Number[]) numbers; // upcast - still not safe! 
bytesNumbers[2] = new Double(0); 
+0

Also, wenn ich von der Numbers-Array zu Bytes-Array gehen möchte, würde ich zuerst die Byte-Array verzweifelt erstellen und dann jede einzelne Zahl in ein Byte in das Byte-Array? – Friso

+0

@ Friso1990 Yup. So macht man das – ControlAltDel

0

Number ist Serializable, so können Sie einfach Ihre Array serialisiert.

0

können Sie Java 8 Stream-API verwenden, über das Array zu durchlaufen, konvertieren jede Zahl auf Byte und sammeln, um Array:

this.coordinates = stream(numbers) 
    .map(Number::byteValue) 
    .toArray(Byte[]::new); 

stream Methode staticly java.util.Arrays.stream importiert.

Beachten Sie, dass Sie hier die Genauigkeit verlieren könnten. Wenn zum Beispiel numbers12345 enthält, wird es in 57 konvertiert. Vier Doppel und Floats, alle Dezimalteile werden verloren gehen.

Verwandte Themen