Wie kann man Variablenwerte der main-Klasse in eine Unterklasse übrgeben?

  • Themenstarter Themenstarter Migelito
  • Beginndatum Beginndatum
Sorry Kai008 das geht leider nich, da ich aus meiner Hauptklasse einen BufferedReader-Typ übergebe.

public static void main(Strings[], args){
....
BufferedReader messData = new BufferedReader(cach);
mess.test(messData); // Übergabe an Klasse holdMessData
....
}

Daher muss doch der Datentyp meiner unterklasse "holdMessData" folgender sein:

public BufferedReader test(BufferedReader messData) throws IOException {

String zeile ="";

// Liest Werte aus Text-Datei Zeilenweise in String ein

while(zeile != null)
{
System.out.println(zeile);
zeile = messData.readLine();
//return zeile;
}
}
Aber dann kann ich kein String zurück geben, oder? Gibt es da keine weitere lösung, vielleicht durch chasting oder soetwas
 
Du kannst nichts außer Object (Exception-Frei) zu einen String casten, da dieser Final ist.
Ich meinte, du sollst den Rückgabewert, und nicht den Parameter-Typ ändern.
Setze den Cursor mal in das return, welches dir Eclipse sicher als falsch markiert und drücke Controll + 1.
 
Zuletzt bearbeitet:
ok wenn ich das mache gibt mir Eclipse zwei optionen an. 1. Option ich kann den Parameter-Typen in String umändern oder
2. option den return Wert in BufferedReader abänder. Wenn ich ein von beiden mache, beist sich immer der Hund in den Schwanz, weil die Methode readLine();
nicht mitspielen möchte (String-Methode).

Unterklasse "holeMessDat"
......
while(zeile != null)
{
System.out.println(zeile);
zeile = messData.readLine();
return zeile;
}
.......

Das ist aber auch verflixt und zugenäht!!
 
Ich bin mir sicher, das dir Eclipse NICHT anbietet, den Parameter-Typ zu ändern.
Mir ist gerade aufgefallen, das dein Code sowieso quatsch ist, da du mitten in der while das return benutzt. Und wenn dus so ließt (Lesevorgang in der Schleife) solltest du sowieso eine do verwenden.

Hier eine Methode an der ich gerade schreibe/geschrieben habe, damit du endlich kapierst wies geht. Nur anschauen.

Java:
boolean load(File databaseFile)
{
	boolean b = false;
	synchronized (LOCK_OBJECT)
	{
		ExecutorService service = Executors.newFixedThreadPool(1);
		Future<Byte> future = service.submit(new Load(databaseFile));
			
		boolean interrupted = false;
		do
		{
			try
			{
				future.get();
				b = true;
			}
			catch (InterruptedException e)
			{
				interrupted = true;
			}
			catch (Exception e)
			{
				b = false;
			}
			finally
			{
				service.shutdown();
			}
		}
		while(interrupted);
	}
	return(b);
}
 
..geil! hat funktioniert und dein Beispile war auch sehr aufschlussreicht.

hab nur das "return zeile" aus der Schleife genommen und danach platziert und oben im Methoden-Kopft, BufferedReader durch String ersetzt und allas war geritzt.

Danke vielmals für deine Hilfe noch zu später Stunde ^^

Gruß.
 
Hallo,

irgendwie stehst du dir beim Programmieren selbst im Weg.
Dir wird gesagt, dass du bei deiner Methode test einen Übergabe-Parameter definieren sollst, vom Typ String. Diesen String willst du dann nachher zurückgeben. Aus irgendeinem Grund änderst du deshalb String in BufferedReader und stehst vor einem Problem, weil du BufferedReader nicht in einen String casten kannst. Dabei hattest du vorher einen String.

wie geht das mit einer coll by value Class?

Es gibt keine call-by-value class. Call-by-Value heißt einfach, dass der Wert bei der Übergabe zu einer Methode kopiert wird.

Gruß

Sascha
 
Wenn du nur die beiden Änderungen vorgenommen hast wirst du aber bloß die letzte Zeile der Datei bekommen, da du innerhalb der Schleife die Variable zeile immer nur auf eine andere String-Instanz verweisen lässt.

Ach ja, package schreibt man klein, Klassen groß.
 
Zurück