Fragen zu generischen Typen

Fragen zu generischen Typen javafrage Sun, 03/19/2017 - 12:15

1. Generics: Typprüfung

1. Generics: Typprüfung

Die generische Klasse Punkt hat eine main() Methode mit einer Reihe von Fehlern.
Kommentieren im Quellcode jede Zeile aus die der Übersetzer nicht übersetzt.

  • Schreiben Sie hierzu ein Kommentarzeichen („//“) direkt vor die inkorrekte Zeile im Quellcode.
  • Geben Sie hinter der fehlerhaften Zeile eine kurze Erklärung warum die Zeile inkorrekt ist.

Beispiel:

// int i = null;// null ist ein Referenztyp der nicht zu int passt

Die Klasse Punkt:

public class Punkt<T extends Number> {

public T x;
public T y;

public Punkt(T xp, T yp) {
x = xp;
y = yp;
}

public static void main(String[] args) {
Punkt<Double> k11;
Punkt<Double> k12;
Punkt<Integer> k21;
Punkt<Integer> k22;
Punkt<Number> k41;
Punkt<Number> k42;
Punkt k55;
Punkt k66;

k11 = new Punkt<Double>(2.2d, 3.3d);
k21 = new Punkt<Integer>(2, 3);
k31 = new Punkt<String>("11","22");
k41 = new Punkt<Number>(2l, 3l);

k41 = new Punkt<Number>(4.4d, 5.5f);
k11 = new Punkt<Double>(3.3f,9.9d);

Punkt<?> k99;
k99 = k11;
k99 = k21;
k99 = k31;

k12 = k11;
k12 = k21;
// ...
k55 = new Punkt<Number>(7.7f, 8.8f);
k66 = new Punkt(7.7f, 8.8f);
}
}

Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 8 Minuten
javafrage Wed, 02/01/2012 - 08:28

2. Generics: Typprüfung

2. Generics: Typprüfung

Die generische Klasse Flaeche hat eine main() Methode mit einer Reihe Fehlern. Kommentieren im Quellcode jede Zeile aus, die der Übersetzer nicht übersetzt.

  • Schreiben Sie hierzu ein Kommentarzeichen („//“) direkt vor die inkorrekte Zeile im Quellcode.
  • Geben Sie hinter der fehlerhaften Zeile eine kurze Erklärung warum die Zeile inkorrekt ist.

Beispiel:

// int i = null;// null ist ein Referenztyp der nicht zu int passt
Quellcode Beschreibung der Fehler
package Kurs2.Generics;

public class Flaeche<T extends Number> {
public T x;
public T y;

public Flaeche(T xp, T yp) {
x = xp;
y = yp;
}

public static void main(String[] a) {
Flaeche<Double> f1;
Flaeche<Double> f2;
Flaeche<Integer> f3;
Flaeche<Integer> f4;
Flaeche<Number> f5;
Flaeche<Number> f6;
Flaeche f7;
Flaeche f8;
Flaeche<?> f9;

f1 = new Flaeche<Double>(2.2d,3.3d);
f3 = new Flaeche<Integer>(2, 3);

f2 = f1;
f2 = f3;

f9 = new Flaeche<String>("11","22");
f5 = new Flaeche<Number>(2l, 3l);
f5 = new Flaeche<Number>(4.4d, 5.5f);
f1 = new Flaeche<Double>(3.3f,9.9d);
f7 = new Flaeche(2.2f,3.3f);
f7 = new Flaeche<Number>(7.7f, 8.8f);
f8 = new Flaeche(7.7f, 8.8f);

f9 = f1;
f9 = f2;
f1 = f9;
}
}
 

 

 

 

 

 

 

 

 

 

 

 

 

Ab hier ist mit Fehlern zu rechnen:



















 

Die Antworten finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 8 Minuten

Antwort zu Frage 1. : Generics, Typprüfung

public class Punkt<T extends Number> {
   public T x;
   public T y;
 
   public Punkt(T xp, T yp) {
    x = xp;
    y = yp;
   }

public static void main(String[] args) {
   Punkt<Double> k11;
   Punkt<Double> k12;
   Punkt<Integer> k21;
   Punkt<Integer> k22;
   Punkt<Number> k41;
   Punkt<Number> k42;
   Punkt k55;
   Punkt k66;
 
   k11 = new Punkt<Double>(2.2d, 3.3d);
   k21 = new Punkt<Integer>(2, 3);
   //k31 = new Punkt<String>("11","22"); Variable wurde nicht deklariert
   k41 = new Punkt<Number>(2l, 3l);
 
   k41 = new Punkt<Number>(4.4d, 5.5f);
   //k11 = new Punkt<Double>(3.3f,9.9d); 3.3.f ist ein Float und kein Double wie gefordert
 
   Punkt<?> k99;
   k99 = k11;
   k99 = k21;
   //k99 = k31; k31 wurde nicht deklariert
 
   k12 = k11;
   //k12 = k21; k12 hat Parameter Double, k21 hat Parameter Integer
   ...
   k55 = new Punkt<Number>(7.7f, 8.8f);
   k66 = new Punkt(7.7f, 8.8f);
   }
}
javafrage Tue, 01/01/2013 - 13:58

3 "Upper Bound Wildcards" anwenden

3 "Upper Bound Wildcards" anwenden

Nutzen Sie das Konzept einer „Upper bound wildcard“ um die generische Klasse Koordinate zu deklarieren, die man nur für die Javaklassen Byte, Float, Integer, Short, Long, Double konfigurieren kann.

Anbei ein Bild der Javaklassenhierarchie:

Klassenhierarchie Number

Vervollständigen Sie den Kopf der Klasse Koordinate:

public class Koordinate

{ // Rumpf ist nicht relevant für diese Aufgabe

}

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

 

 

Antwort zu Frage 2. : Generics, Typprüfung

Quellcode Beschreibung der Fehler
package Kurs2.Generics;

public class Flaeche<T extends Number> {
public T x;
public T y;

public Flaeche(T xp, T yp) {
x = xp;
y = yp;
}

public static void main(String[] a) {
Flaeche<Double> f1;
Flaeche<Double> f2;
Flaeche<Integer> f3;
Flaeche<Integer> f4;
Flaeche<Number> f5;
Flaeche<Number> f6;
Flaeche f7;
Flaeche f8;
Flaeche<?> f9;

f1 = new Flaeche<Double>(2.2d,3.3d);
f3 = new Flaeche<Integer>(2, 3);

f2 = f1;
//f2 = f3;

//f9 = new Flaeche<String>("11","22");
f5 = new Flaeche<Number>(2l, 3l);
f5 = new Flaeche<Number>(4.4d, 5.5f);
//f1 = new Flaeche<Double>(3.3f,9.9d);
f7 = new Flaeche(2.2f,3.3f);
f7 = new Flaeche<Number>(7.7f, 8.8f);
f8 = new Flaeche(7.7f, 8.8f);

f9 = f1;
f9 = f2;
//f1 = f9;
}
}

 

 

 

 

 


 

 

 






 

 

Ab hier ist mit Fehlern zu rechnen: 
Man darf keine Instanziierung von
Integer auf Double zuweisen
String ist keine Spezialisierung von Number


3.3f wird durch Autoboxing zu Instanz
von Float. Float leitet nicht aus
der Klasse Double ab

 



f9 muss ein Flaeche<Double> sein.
Keine sichere Zuweisung
 

javafrage Sun, 03/19/2017 - 12:05

4. Antwort zu Frage 3

4. Antwort zu Frage 3
public class Koordinate <T extends Number>
 { // Rumpf der Klasse. Er ist unbedeutend in dieser Aufgabe }
javafrage Sun, 03/19/2017 - 12:47