# Objektmethode aus Konstruktor aufrufen?



## arettig (27. Jun 2006)

Hallo,
ich bastel gerade an einer Klasse, die u.a. einen Konstruktor hat, der eine Objektmethode des erzeugten Objektes aufrufen soll, per this.Objektmethode.
Java weigert sich aber mit Cannot find symbol, diese Objektmethode zu erkennen. 

Ungefähr so:


```
public "Klassenname"(Collection<? extends K> c) {
     this(c.size()); //ruft einen anderen Konstruktor auf
     for(Iterator i=c.iterator();i.hasNext();){ //soll die Elemente aus c mit der add-methode dazufügen
	    this.add(i.next());
	 }
```

Wo mache ich den Denkfehler? Ich schnall's nicht   

Danke !!!

EDIT: Ich muss das wohl nach (K) casten, oder?


----------



## Beni (27. Jun 2006)

"i.next()" liefert immer ein Objekt vom Typ "K" zurück, da musst du nichts mehr casten.

Grundsätzlich sieht der Code korrekt aus; existiert denn tatsächlich eine "add" Methode, welche ein "K" nimmt? Zeig doch mal den ganzen Code.

P.S, man kanns auch mit weniger Schreibaufwand machen :wink: :

```
...
for( K k : c ){
  add( k );
}
...
```


----------



## lhein (27. Jun 2006)

Weniger ist nicht immer mehr. Vergleich mal beide Varianten und sag ehrlich was lesbarer ist.

lr


----------



## Pulvertoastman (27. Jun 2006)

arettig hat gesagt.:
			
		

> ```
> public "Klassenname"(Collection<? extends K> c) {
> ...
> }
> ```



Stehen da wirklich Anführungszeichen um den Klassennamen oder ist das nur für das Posting hier, weil du das umbenannt hast?


----------



## arettig (27. Jun 2006)

Erstmal vielen Dank!

Die Anführungszeichen sind natürlich nur für das Posting 

Die Add-Methode nimmt K-Objekte, das ist kein Problem. next ist auch vom Typ K. Trotzdem funktioniert das NUR, wenn ich nochmal nach K caste...verstehe ich noch nicht...  :cry:


----------



## byte (27. Jun 2006)

LR hat gesagt.:
			
		

> Weniger ist nicht immer mehr. Vergleich mal beide Varianten und sag ehrlich was lesbarer ist.



Benis For Schleife ist halt genau für die Iteration durch Collections gemacht, also sollte man sie auch benutzen. Dann braucht man sich auch nicht zu fragen, warum man casten muss denn...


```
Iterator i=c.iterator()
```

liefert einen nicht-generischen Iterator, der Objects liefert. Das casten fällt erst bei Benis Schleife weg oder bei:


```
Iterator<K> i=c.iterator()
```

@Threadersteller: Wie sieht denn der andere Konstruktor aus, den Du mit this() aufrufst? Offenbar findet er den ja nicht, wie Du schon bemerkt hast.


----------



## arettig (27. Jun 2006)

@byto: Du hast es genau erfasst...wenn man Iterator<K> verwendet, geht es natürlich. Aber mittlerweile bin ich auf die schlaue Idee gekommen, einfach die addAll-methode zu benutzen, die ich erbe... 

Wobei unser Prof heute auch nicht gleich auf den Fehler gekommen ist und erstmal ein Compilerfehler vermutet hat! 

Auf jeden Fall habe ich gerade dazugelernt, dass man die sichere For-Schleife auch für collections nehmen kann   cool!

Danke Euch! Echt klasse, diese Foren!!!!


----------



## Leroy42 (27. Jun 2006)

byto hat gesagt.:
			
		

> LR hat gesagt.:
> 
> 
> 
> ...



Ich würde es auch so sagen, daß Beni's Schleife leserlicher ist, wenn man etwas _abstrakter_
denkt:

_Foreach k of type K in collection do : add(k)_

Die technischen, für die eigentliche Bedeutung wenig hilfreichen,
Details, kann man sich dabei dann schenken.



			
				arettig hat gesagt.:
			
		

> Auf jeden Fall habe ich gerade dazugelernt, dass man die sichere For-Schleife auch für collections nehmen kann   cool!


 :shock: Was meinst du mit _sichere_ For-Schleife? Bzw. was ist eine _unsichere_?


			
				arettig hat gesagt.:
			
		

> Danke Euch! Echt klasse, diese Foren!!!!


Hätt' ich während meiner Studienzeit auch gern gehabt *schwelg"


----------



## byte (27. Jun 2006)

Oh ja. Das hätte mir einige Nächte mehr Schlaf verschafft.  :lol:


----------



## AlArenal (27. Jun 2006)

Ihr Penner.. meinereiner musste noch Pascal, C/C++ ran. VOn den armen Schweinen, die Haskell & Co. machen mussten und müssen, mal ganz zu schweigen


----------



## Leroy42 (27. Jun 2006)

AlArenal hat gesagt.:
			
		

> die Haskell & Co. machen *mussten*


*durften*  :bae:


----------



## arettig (27. Jun 2006)

Pascal hab' ich auch mal gemacht und C (++) bleibt uns auch nicht erspart.



> icon_eek.gif Was meinst du mit sichere For-Schleife? Bzw. was ist eine unsichere?



Ich kenne Benis for-Schleife als "sichere" For-Schleife. Sie kann halt niemals zur Endlos-Schleife werden, während die "normale" for-schleife bei uns an der FH "unsicher" heisst. Aber das ist dann wohl kein gängiger Terminus?


----------



## Leroy42 (27. Jun 2006)

Ach das meinst du!

Kann gut sein daß der Terminus allgemein verbreitet ist.


----------



## byte (27. Jun 2006)

Ich MUSSTE Scheme machen, das ist schlimm genug. :roll:


car(car(cdr(MfG)))


----------



## Leroy42 (27. Jun 2006)

*C*ontents of *A*dress *R*egister
*C*ontents of *D*isplacement *R*egister[/b][/b]

Ich fand's nicht schlimm und denke eher daß _Programmierer_,
die nie ihre _einseitige, imperative, kleine Welt_ verlassen haben,
etwas verpaßt haben.


----------

