Problem mit array

Hallo,

array = alb.toArray(new byte[0]);

Netbeans zeig mir folgende Meldung:

was hätte das zu bedeuten?

[quote=CyborgBeta]was hätte das zu bedeuten?[/quote]Dass die Methode keine Arrays von primitiven Typen akzeptieren würde…

bye
TT

Also so schaut so aus:

        ArrayList<Byte> alb = new ArrayList<Byte>();
        alb.add((byte) 99);
        array = alb.toArray(new byte[0]);```

Das byte[] ist schon wichtig. Aber dort steht doch not applicable?

Weil byte =/= Byte
byte ist ein primitiver Datentyp. Byte aber ist (wie bereits durch die Groß-Schreibweise angedeutet) ein Objekt das einen Parameter des primitiven Datentyps “byte” enthält.
Wenn du also aus all deinen “byte” ein “Byte” machst funktioniert dein Code wieder.

Weitere wichtige (englische) Artikel zu dem Thema:

Autoboxing! Warum “byte b = new Byte(1)” funktioniert und umgekehrt (aber nicht mit arrays)
Autoboxing and Unboxing

Generics und Primitive Datentypen! Warum Generics keine primitiven Datentypen unterstützen (sondern eben nur die Autoboxing Varianten wie in deinem Code)
Why don’t Java Generics support primitive types? - Stack Overflow

Immutable! Eine Begriffserklärung für Immutable (Alle Autoboxingklassen sind immutable)
Immutable Objects

Weil java nicht weiß, wie viel Speicherplatz für den generic type reserviert werden muss?

Möchte ich aber nicht! Mit byte[] könne n am effektivsten Infos gespeichert werden!

(Außerdem muss ich nun schlafen^^)

was soll das denn jetzt heißen?
Was genau machst du überhaupt?

„Effektiv“ ist so eine Sache.
Auf einem hinreichend komplexen System wie einem Heimrechner mit einer hinreichend komplexen VM (wie der von Java8) dürften die Auswirkungen kaum bis garnicht ins Gewicht fallen und diese Wrapperklassen sind nunmal die einzige Möglichkeit um in Java mit Generics und primitiven Datentypen zusammen arbeiten zu können.

Aber klar du kannst dich natürlich entscheiden und entweder die bereits vorhandenen Möglichkeiten nutzen um dein Ziel innerhalb von 10Sekunden zu erreichen und hinterlässt ein //TODO im Code für wenn du in die Benchmark&Performancephase am Ende der Entwicklung kommst mit dem Kommentar „Ohne Wrapperklassen eventuell bessere Performance?“, falls es denn zu Performanceproblemen an der Stelle kommt.
Oder aber du schreibst direkt deine eigene Klasse „PrimitiveByteArrayList“ die keine Generics entgegennimmt sondern direkt ein (primitives-byte)-array instanziiert und verwendet und ersetzt die ArrayList damit in deinem kleinen Codeschnipsel. Ist an sich nicht schwer das verhalten einer ArrayList zu kopieren, dauert halt mit größter Sicherheit ein gutes Stück länger nur um am Ende niemals zu wissen wirklich an der Effizienz etwas verändert zu haben :wink: (Und dann kommt natürlich eventuell noch das Problem das du eventuell wiederum weitere Klassen verwendest der Java Standard Library die wiederum Generics wollen, die musst du dann natürlich auch umschreiben - weil sie inkomptibel sind zu deiner selbstgeschriebenen Klasse sind und natürlich auch wieder der Effizienz wegen)

Wenn es nur darum geht byte Daten zu sammeln wäre ByteArrayOutputStream die deutlich bessere Wahl.

[QUOTE=mymaksimus]was soll das denn jetzt heißen?
Was genau machst du überhaupt?[/QUOTE]

low-level bytes von einer Seite beziehen, Wrapper vermeiden, effektiv/effizient, (Threads).

Ich hab schiss. :smiley:

Wie geil
-> Das geht in Java so nicht, da braucht man für Generics nun mal Objekte
-> Mir doch egal, ich mag das aber nicht, weil das zu Standard und zu gewöhnlich ist, kann ich da nix eigenes, unverständliches, langsameres bauen, was es für meinen Speziellen Sonderfall besser baut