[CodeMonkeys] Array -> duplicateEverySecondElement : initialisieren eines generischen Arrays

Robin Ferrari
Erstie
Erstie
Beiträge: 15
Registriert: 15. Apr 2016 10:16

[CodeMonkeys] Array -> duplicateEverySecondElement : initialisieren eines generischen Arrays

Beitrag von Robin Ferrari » 23. Apr 2017 09:26

Hallo,

Ich habe mich gestern an der duplicateEverySecondElement Aufgabe probiert. Leider gelingt es mir nicht, einen Array so zu initialisieren, dass er vom Server oder zur Runtime angenommen wird.

Als erstes habe ich versucht über die Methode

Code: Alles auswählen

... = (Listobject<T>)Array.newInstance(...);
Einen generischen Array zu erzeugen, dabei erhalte ich aber folgende Meldung vom Server:
forbidden call to method: – newInstance
Also geh ich mal davon aus, dass es nicht gewollt ist, dass wir andere Methoden bedienen. (Warum zählt das auch für die Standardbibliothek?)

Ein weiterer Versuch war dann:

Code: Alles auswählen

Listobject<T>[]  result = (Listobject<T>[]) new Object[...];
Dann wird zwar compeliert aber ich habe eine Runtimeexception:
Failurereport
Testheadder – dynamicTest_duplicate_array_elements(array.insert.tests_duplicateEverySecondElement.duplicateEverySecondElement_Array_Test)
Message – [Ljava.lang.Object; cannot be cast to [Lmodels.arrays.listobjectmodel.Listobject;
Ich habe noch einige andere Sachen versucht, hat aber alles nichts gebracht. Hat jemand eine Idee? Oder ist es vielleicht gar nicht gewollt, das wir newInstance() nicht benutzen dürfen?

Vielen Dank
Robin
Zuletzt geändert von Robin Ferrari am 25. Apr 2017 12:27, insgesamt 1-mal geändert.

Julian Prommer
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [CodeMonkeys] Array -> duplicateEverySecondElement : initialisieren eines generischen Arrays

Beitrag von Julian Prommer » 23. Apr 2017 13:11

1. Initialisierung von generischen Arrays unintiutiv -> nachschlagen wie es geht.
2. es sind Methoden erlaubt die auf der Whitelist stehen. Im Rahmen üblicher AuD-Übungsaufgaben werden Methoden aus dem Bereich "reflections" nicht zugänglich gemacht.
AuD Orga

Robin Ferrari
Erstie
Erstie
Beiträge: 15
Registriert: 15. Apr 2016 10:16

Re: [CodeMonkeys] Array -> duplicateEverySecondElement : initialisieren eines generischen Arrays

Beitrag von Robin Ferrari » 25. Apr 2017 09:20

Julian Prommer hat geschrieben:1. Initialisierung von generischen Arrays unintiutiv -> nachschlagen wie es geht.
2. es sind Methoden erlaubt die auf der Whitelist stehen. Im Rahmen üblicher AuD-Übungsaufgaben werden Methoden aus dem Bereich "reflections" nicht zugänglich gemacht.
Hallo und danke für die Antwort. Ich habe es mittlerweile gelöst, möchte aber noch darauf hinweisen, dass ich selbstverständlich vorher nachgeschlagen habe und auch, dass das Material das in der Aufgabe zum nachschlagen angegeben ist, nicht auf einen brauchbaren Lösungsweg verweist, deshalb meine ursprüngliche Frage hier im Forum.

Es finden sich dort folgende Bemerkungen zu generischen Arrays:
Aber lässt sich auch ein Array von mehreren Taschen, die jeweils Strings enthalten, deklarieren? Ja. Doch während die Deklaration noch möglich ist, ist die Initialisierung schlichtweg ungültig: Der Grund liegt in der Umsetzung in Bytecode verborgen, und die beste Lösung ist, die komfortablen Datenstrukturen aus dem java.util-Paket zu nutzen. Für Entwickler ist ein List<Pocket<String>> sowieso sexyer als ein Pocket<String>[].Laufzeiteinbußen sind kaum zu erwarten. Da Arrays aber vom Compiler automatisch bei variablen Argumentlisten eingesetzt werden, gibt es ein Problem, wenn die Parametervariable eine Typvariable ist. Bei Signaturen wie f(T... params) hilft die Annotation @SafeVarargs, die Compiler-Meldung zu unterdrücken.
Lg Robin

Robin Ferrari
Erstie
Erstie
Beiträge: 15
Registriert: 15. Apr 2016 10:16

Re: [CodeMonkeys] Array -> duplicateEverySecondElement : initialisieren eines generischen Arrays

Beitrag von Robin Ferrari » 19. Sep 2017 16:06

Hallo,

Es wurde hier ja nie abschließend geklärt, in welchem Format die Arrays sein sollen. Aber im Java Übungsblatt heißt es nun, dass wir keinen Umweg über Object gehen müssten.

Dies ist in Java allgemein nicht notwendig. Meine Lösung die auch durch den Kompiler geht lautet so:

Listobject<T>[] result = new Listobject[...]

Dies Klappt für alle generischen Arrays. Ich nehme an, dass dies auch in der Klausur zulässig ist?

Lg
Robin

Antworten

Zurück zu „Archiv“