Typensicherheit

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 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
 
Auf diesen Beitrag antworten »
neuling96

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
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
neuling96

"Das sagt doch schon alles: javac -Xlint *.java"
was genau bedeutet das?


vielen dank smile 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
 
Auf diesen Beitrag antworten »
eulerscheZahl

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.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »