x: String oder double

anfaenger94

Mitglied
Hallo,

habe eine Frage hier mal ein Beispiel:

Java:
String a;
double b;

String bzw double x;

if(bsp == 0)
{ x soll String a sein }
if(bsp == 1)
{ x soll double b sein }

und dann will ich eben x ausgeben.
Java:
System.out.println(x);

so will ich es eben nicht machen:

Java:
if(bsp == 0)
{System.out.println(a);}
if(bsp == 1)
{System.out.println(b);}

denn das ganze müsste ich dann ca. 50-100 mal wiederholen
und genau sowas will man doch in der Informatik vermeiden 🙂

p.s. x muss ja nicht unbedingt eine variable sein
sondern könnte auch ne Methode oder so sein.

danke für euere Antworten 🙂
 
Zu wenig Infos. Was soll wann wo wie damit gemacht werden? Im Zweifelsfall würde es ein
Object x = 123.45;
oder
Object x = "Hallo";
schon tun (ersteres geht wegen Autoboxing).
 
Hi,
Mit Object und Casten geht das schon,
wobei die Typsicherheit von Java nicht ohne Grund eingebaut ist ^^ und dieses Speichern in Object hat keine großen Nährwert, da man nicht weiß wie das if entschieden wird.
Ich tippe hier eher auf einen Designfehler den man durch eine Strukturänderung wesentlich eleganter in den Griff bekommen sollte.
Gruß
 
Alternativ könnte man einen generischen Container verwenden, der den eigentlichen Inhalt nicht näher spezifiziert:
Java:
public class Test {

	public static void main(String[] args) {
		Container<?> container = new Container<Object>(null);
		int bsp = 0;
		if (bsp == 0) {
			container = new Container<String>("Dies ist ein Test");
		} else if (bsp == 1) {
			container = new Container<Double>(3.1415);
		}
		System.out.println(container.getValue());
	}

	private static class Container<T> {

		private T value;

		public Container(T value) {
			setValue(value);
		}

		public T getValue() {
			return value;
		}

		public void setValue(T value) {
			this.value = value;
		}
	}
}
 
Man könnte auch mit String.valueOf einen String mit dem Double-Inhalt im if erzeugen, wobei ich nicht weiß, was das mit dem eigendlichen Problem zu tun hat.

Aber wie Fire schon sagte, sieht nach einen Designfehler aus. Zu viele if's sind immer ein Hinweiß darauf, und 50 - 100 sind definitiv zu viele.
Ohne weiter Informationen würde ich sagen, für jede Bsp. eine eigene Klasse, Abstrakte Methode output/ausgabe etc, in einer Variable im Hauptprogramm die Beispiele je nach dem austauschen und die Methode einfach aufrufen, in der die Variable ausgegeben wird.
 
Auch möglich:

Java:
if (bsp == 0)
{String x = "";}
else if (bsp == 1)
{Double x = 0;}
else
{Object x = null;}

Dann beschwert sich Java nicht, dass das Objekt nicht initialisiert wurde und die Anforderungen sind erfüllt...
 
Das geht durch Polymorphie, Ausweichung auf die Wrapper und Zuweisung an einen gemeinsamen Obertyp.
 
Auch möglich:

Java:
if (bsp == 0)
{String x = "";}
else if (bsp == 1)
{Double x = 0;}
else
{Object x = null;}

Dann beschwert sich Java nicht, dass das Objekt nicht initialisiert wurde und die Anforderungen sind erfüllt...
Aber so haben die drei Variablen namens x jeweils nur einen sehr kleinen Gültigkeitsbereich: außerhalb der Blöcke, in denen sie zugewiesen werden, sind sie nicht bekannt - ich glaube nicht, dass das das ist, was der TO braucht.
 

Zurück
Oben