Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Typensicherheit (http://www.informatikerboard.de/board/thread.php?threadid=2084)
Geschrieben von neuling96 am 20.01.2015 um 18:03:
Typensicherheit
gegben eine menge von codes
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
class Haus {
private Tier bewohner;
public boolean belegt () {
return this.bewohner != null;
}
public boolean betreten (Tier t) {
if (this.bewohner != null) return false;
this.bewohner = t;
return true;
}
public Tier verlassen () {
Tier t = this.bewohner;
this.bewohner = null;
return t;
}
} |
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
public class Tier {
public void fressen () {
System.out.println("Omnomnom");
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
public class Zoo {
public static void main(String[] args) {
Haus elefantenhaus = new Haus();
Elefant jumbo = new Elefant();
jumbo.trompeten();
jumbo.fressen();
elefantenhaus.betreten(jumbo);
Waerter waerter = new Waerter();
// als er gerade nicht hinsieht, passiert das:
elefantenhaus.verlassen();
elefantenhaus.betreten(new Muecke());
waerter.elefantenBuersten((Elefant) elefantenhaus.verlassen());
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
|
public class Muecke extends Tier {
public void summen () {
System.out.println("Bzzzzzzz");
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
|
public class Waerter {
public Waerter (String n) {
}
public void elefantenBuersten (Elefant e) {
e.fressen();
e.trompeten();
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
|
public class Elefant extends Tier {
public void trompeten () {
System.out.println("Toot!");
}
}
|
|
1.Bei Ablauf des Programmes Zoo wird ein Fehler auftreten
um welchen einen Fehler handelt es sich?
Waerter waerter = new Waerter(); // der Ausruf geht so nicht durch, da in der klasse waerter bereits ein Konstrukteur vorhaden ist und somit der Default Konstrukteur nicht erlaubt ist
Bei b) fehlt mir der komplette ansatz
Geschrieben von neuling96 am 20.01.2015 um 18:45:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
class Haus <T> {
private T bewohner;
public boolean belegt () {
return this.bewohner != null;
}
public boolean betreten (T t) {
if (this.bewohner != null) return false;
this.bewohner = t;
return true;
}
public T verlassen () {
T t = this.bewohner;
this.bewohner = null;
return t;
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
public class Zoo {
public static void main(String[] args) {
Haus<Elefant>elefantenhaus = new Haus();
Elefant jumbo = new Elefant();
jumbo.trompeten();
jumbo.fressen();
elefantenhaus.betreten(jumbo);
Waerter waerter = new Waerter();
// als er gerade nicht hinsieht, passiert das:
elefantenhaus.verlassen();
elefantenhaus.betreten(new Muecke());
waerter.elefantenBuersten((Elefant) elefantenhaus.verlassen());
}
}
|
|
allerdings haut das auch nicht hin also
veränderung von
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
public class Zoo {
public static void main(String[] args) {
Haus<Elefant> elefantenhaus = new Haus();
Elefant jumbo = new Elefant();
jumbo.trompeten();
jumbo.fressen();
elefantenhaus.betreten(jumbo);
//Waerter waerter = new Waerter();
// als er gerade nicht hinsieht, passiert das:
elefantenhaus.verlassen();
elefantenhaus.betreten(new Elefant());
//waerter.elefantenBuersten((Elefant) elefantenhaus.verlassen());
}
}
|
|
liefert
Geschrieben von eulerscheZahl am 20.01.2015 um 19:06:
Das sagt doch schon alles: javac -Xlint *.java
Deine Lösung ist gelungen, nur 2 Anmerkungen.
Haus<Elefant> elefantenhaus = new Haus<Elefant>(); //Typ in Konstruktor(sic!) angegeben.
waerter.elefantenBuersten(elefantenhaus.verlassen()); //cast unnötig.
Und wo scheiterst du bei eclipse? Ich rate dir wirklich, nimm dir die paar Minuten, das einzurichten, ich helfe auch.
Geschrieben von neuling96 am 20.01.2015 um 19:42:
"Das sagt doch schon alles: javac -Xlint *.java"
was genau bedeutet das?
vielen dank

für dein angebot mit eclipse, darauf werde ich in 1-2 wochen zurückgreifen, denn bald beginnt beginnt die Klausurenphase und das verschlingt meine ganz freizeit
Geschrieben von eulerscheZahl am 20.01.2015 um 19:49:
Es gibt keine Fehler, sondern nur Hinweise ("Note").
Für eine detailiertere Aussage sollst du es mit -Xlint neu kompilieren.
Was macht -Xlint?
man javac eingeben (keine Ahnung, ob das in Windows auch geht) öffnet die Hilfe.
| Zitat: |
-Xlint
Enable all recommended warnings. In this release, enabling all available warnings is recommended. |
wenn du es mit -Xlint neu kompilierst, erhältst du:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
Zoo.java:5: warning: [rawtypes] found raw type: Haus
Haus<Elefant> elefantenhaus = new Haus();
^
missing type arguments for generic class Haus<T>
where T is a type-variable:
T extends Object declared in class Haus
Zoo.java:5: warning: [unchecked] unchecked conversion
Haus<Elefant> elefantenhaus = new Haus();
^
required: Haus<Elefant>
found: Haus
Zoo.java:17: warning: [cast] redundant cast to Elefant
waerter.elefantenBuersten((Elefant) elefantenhaus.verlassen());
^
3 warnings |
|
Auf die Punkte hatte ich dich oben auch hingewiesen.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH