Generic - Verstädnisproblem

oSnake

Mitglied
Hallo Leute,

folgender Code
Code:
class A { };
class B extends A { };
class C extends B { };
class D extends B { };
class E { };

class X {
  public static <T> T   f(T[]               a, Feld<? extends T> b) { return null; }
  public static <T> T[] g(Feld<? extends T> a, Feld<? super T>   b) { return null; }
}

public class Test {
  public static void main(String[] args) {

        //Anweisungen
    A        x01 = X.f(new B[3],                new FeldFix<D>(8));
    Object[] x02 = X.f(new C[2],                new FeldFix<D[]>(8));
    Feld     x03 = X.f(new FeldFix[4],          new FeldFix<FeldFix<A>>(8));
    A[]      x05 = X.g(new FeldFix<B>(8),       new FeldFix<B>(8));
    B[]      x06 = X.g(new FeldFix<B>(8),       new FeldFix<A>(8));
    C[]      x07 = X.g(new FeldFix<B>(8),       new FeldFix<A>(8));
    C[]      x08 = X.g(new FeldFix<C>(8),       new FeldFix<A>(8));
    C[]      x09 = X.g(new FeldFix<A>(8),       new FeldFix<C>(8));
    C[]      x10 = X.g(new FeldFix<D>(8),       new FeldFix<B>(8));
    Object   x11 = X.g(new FeldFix<B>(8),       new FeldFix<D>(8));
    B[]      x12 = X.g(new FeldFix<A>(8),       new FeldFix<Object>(8));
    A[]      x13 = X.g(new FeldFix<B>(8),       new FeldFix<Object>(8));
    Object   x14 = X.g(new FeldFix<C[]>(8),     new FeldFix<A[]>(8));
    Object   x15 = X.g(new FeldFix<Feld<C>>(8), new FeldFix<Feld<A>>(8));
    Object   x16 = X.g(new FeldFix<Feld<C>>(8), new FeldFix<Feld>(8));
  }
}

die Frage vom Prof ist hier = Welche der folgenden Anweisungen werden vom Compiler akzeptiert, welche nicht?


Leider blick ich absolut nicht durch was die Methoden f und g hier machen.
 

InfectedBytes

Top Contributor
Im Endeffekt machen sie gar nichts, da sie immer null zurückgeben.
Bei der Aufgabe geht es eher darum zu verstehen wie Generics funktionieren.

Die Funktion f erwartet ein Array eines beliebigen Typs (T), sowie ein Objekt vom Typ Feld, wobei Feld wieder generisch ist. Das besondere ist hierbei, dass der generische Typ des Feldes von dem Typ T erben muss.

Wenn du also ein Array vom Typ XYZ übergibst, und ein Feld<ABC>, dann ist dass nur korrekt, wenn ABC auch von XYZ erbt
 

oSnake

Mitglied
Danke erstmal für die schnelle Antwort :) !

Demnach wird also die Anweisung

A x01 = X.f(new B[3], new FeldFix<D>(8));

akzeptiert da D von B erbt,

Object[] x02 = X.f(new C[2], new FeldFix<D[]>(8));

wiederum nicht da D nicht von C erbt?


Muss ich hier nicht auch beachten in welcher Klasse die Methode gestartet wird?
 

InfectedBytes

Top Contributor
erstmal musst du auch die Rückgabe beachten. Wenn du den Typ XYZ[] übergibst, wird der Typ XYZ zurückgegeben.

Code:
Object[] x02 = X.f(new C[2], new FeldFix<D[]>(8));
Hier musst du aufpassen, Dem Feld wird nicht der Typ D übergeben, sondern der Typ D[], also ein Array von D. Selbst wenn D also von C erben würde, würde es nicht gehen, da eben D[] übergeben wird.
Außerdem passt hier die Rückgabe auch nicht, da f zwar ein C Array als Parameter bekommt, aber nur ein einzelnes C zurückgibt. Object[] x02 ist aber offensichtlich eben nicht vom Typ C
 

InfectedBytes

Top Contributor
Auf Grund der statischen Typisierung, wird vom Compiler geprüft, ob eine Zuweisung auch erlaubt ist. Und der Compiler sieht eben an Hand der Signatur, dass f eben einen bestimmten Typen (T) zurückgibt. Dass die Methode effektiv nie ein konkretes Objekt, sondern nur null zurückgibt, ist dabei nicht von Bedeutung. Der Compiler betrachtet hier nur die Signatur
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
O Comparable Generic Java Basics - Anfänger-Themen 24
F Type safety: A generic array of.. Fehler Java Basics - Anfänger-Themen 3
Yjuq Generic Methode - Wie muss die List Definition aussehen? Java Basics - Anfänger-Themen 3
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
G instanceof in Generic Java Basics - Anfänger-Themen 7
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
M Generic Prüfungsvorbereitung Java Basics - Anfänger-Themen 4
G Generic und Listen Java Basics - Anfänger-Themen 8
J Generic - Autoboxing Java Basics - Anfänger-Themen 18
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
S Generic Java Basics - Anfänger-Themen 9
P Java Generic Wildcard Java Basics - Anfänger-Themen 2
G Namen der Generic Klasse Java Basics - Anfänger-Themen 3
D generic extendet class Java Basics - Anfänger-Themen 10
M Generic's und Vererbung Java Basics - Anfänger-Themen 6
B Generic? Enum - So lösbar? Java Basics - Anfänger-Themen 8
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
C Generic Tutorial Java Basics - Anfänger-Themen 12
T Generic vom Generic: Zu sehr verschachtelt? Java Basics - Anfänger-Themen 6
V libssrckdtree-j Generic k-d tree Java library - weiss nicht wo des hin soll Java Basics - Anfänger-Themen 2
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
A Generic Problem Java Basics - Anfänger-Themen 16
S Generic Methode: syntax klemmt Java Basics - Anfänger-Themen 10
S Generic: Verständnisfrage Java Basics - Anfänger-Themen 2
S generic programmierung "ne:w T[X]" Java Basics - Anfänger-Themen 2
G generic interface problem Java Basics - Anfänger-Themen 12
Safado generic array creation Java Basics - Anfänger-Themen 2
G Frage zur Generic java ? Java Basics - Anfänger-Themen 9
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben