# Variable auf Typ prüfen (weiteres Problem)



## bjcoon (16. Jun 2008)

Mit welcher Methode prüfe ich, welchen Typs eine Variable ist?


----------



## Guest (16. Jun 2008)

bjcoon hat gesagt.:
			
		

> Mit welcher Methode prüfe ich, welchen Typs eine Variable ist?


Java ist statisch getypt. Schau einfach nach, wo Du die Variable deklariert hast, da steht der Typ immer dabei.


```
int x; // der Typ von x ist int
```


----------



## Joker (16. Jun 2008)

sowas?

```
Integer i =0;     
      if(i instanceof Integer) {
         System.out.println("das ist ein Integer");
      }
```

(zumindest wenn es keine primitiven Datentypen sind)


----------



## bjcoon (16. Jun 2008)

Erstmal danke für eure Antworten.

Machen wirs konkret:


```
List liste = new ArrayList();
```

Eigentlich wollte ich nur prüfen, ob ich damit eine ArrayList erstellt habe?


----------



## musiKk (16. Jun 2008)

Sicher, was denn sonst?


----------



## bjcoon (16. Jun 2008)

Mich hat es ein bisschen durcheinander gebracht, weil ich mit:


```
List liste = new ArrayList();
```

zu Beginn mit 'List' begonnen habe und nicht mit 'ArrayList'.
Wie ist das zu verstehen?


----------



## maki (16. Jun 2008)

List = Interface
ArrayList, LinkedList = Implementierungen

Solltest dir das Collection Framework einverleiben bevor du komplexere Probleme behandeln willst: http://java.sun.com/docs/books/tutorial/collections/index.html


----------



## Joker (16. Jun 2008)

probier es doch einfach aus und schau dann dir dann mal die Doku an, um das Ergebnis nachzuvollziehen:


```
List<String> liste = new ArrayList<String>();
      if (liste instanceof ArrayList) { //true
          System.out.println("ArrayList");
      } 
      
      if(liste instanceof List) { //true
          System.out.println("List");
      }
      
      if(liste instanceof Vector) { //false
          System.out.println("Vector");
      }
```


----------



## bjcoon (16. Jun 2008)

Was ist nun der Unterschied zwischen List und ArrayList?

Als Ausgabe erhalte ich

List
ArrayList


----------



## AlArenal (16. Jun 2008)

ArrayList verhält sich zu List etwa wie VW Golf V zu Automobil.

Von einem Automobil ist bekannt, dass es 4 Räder hat, einen Motor, wenigstens nen Platz für nen Fahrer, etc. Aber niemand kann ein Automobil kaufen, weil es nur eine Generalisierung ist. Eine konkrete Implementierung wäre ein spezifisches Modells eines Herstellers. Das hat diegleichen Eigenschaften / Möglichkeiten wie jedes Automobil, ist aber real existent.

Übertragen auf obige Analogie sagst du also, dass das Automobil meinAuto ein VW Golf V ist.


----------



## LordLuzifer (16. Jun 2008)

List ist das Interface, das alle Collections implementieren. ArrayList ist eine Collection, die List implementiert. List enthält die Grundbefehle wie set(), get() etc. ArrayList fügt diesen Grundbefehlen ein paar speziellere dazu.


----------



## bjcoon (16. Jun 2008)

AlArenal hat gesagt.:
			
		

> ArrayList verhält sich zu List etwa wie VW Golf V zu Automobil.
> 
> Von einem Automobil ist bekannt, dass es 4 Räder hat, einen Motor, wenigstens nen Platz für nen Fahrer, etc. Aber niemand kann ein Automobil kaufen, weil es nur eine Generalisierung ist. Eine konkrete Implementierung wäre ein spezifisches Modells eines Herstellers. Das hat diegleichen Eigenschaften / Möglichkeiten wie jedes Automobil, ist aber real existent.
> 
> Übertragen auf obige Analogie sagst du also, dass das Automobil meinAuto ein VW Golf V ist.



Eine bessere Beschreibung hätte ich mir nicht wünschen können. Vielen Dank!


----------



## bjcoon (16. Jun 2008)

Anlass des ganzen war folgendes Problem:


```
import java.util.*;
import java.io.*;

public class Telefonliste {

  public static BufferedReader br = new BufferedReader (new InputStreamReader(System.in));

  public static void main (String[] args) {

	String eintrag;
	List liste = new ArrayList();

	System.out.println("Bitte geben Sie einen Namen und die Telefonnummer ein. Bsp.: 'Frank 0123456'");
	eintrag = leseEintrag();
	zeigeEintrag(eintrag);
	speichereEintrag(eintrag);

  }

  public static String leseEintrag() {
	while (true) {
	  try {
	    return br.readLine();
	  }
	  catch (Exception e) {
	    System.err.println("Eingabefehler");
	  }
  	}
  }

  public static String zeigeEintrag(String eintrag) {

	System.out.println(eintrag);
	return eintrag;

  }

  public static String speichereEintrag (String eintrag, List liste) {

	liste.add(eintrag);
	return eintrag;

  }

  public void löscheEintrag (String eintrag, List liste) {

	liste.remove(eintrag);

  }

}
```

Der Compiler meldet einen Fehler bei der Methode speichereEintrag()

Das Eingeben und das Ausgeben des eingebenen Strings über die Konsole funktioniert, aber leider funktioniert das hinzufügen an die Liste mit Hilfe der Methode speichereEintrag() nicht.

Was ist der Fehler?


----------



## Guest (16. Jun 2008)

bjcoon hat gesagt.:
			
		

> Mich hat es ein bisschen durcheinander gebracht, weil ich mit:
> 
> 
> ```
> ...


Eine Variable hat in Java genau einen Typ. Deine Variable liste hat den Typ List. List ist kein primitiver Typ (wie int, long, char etc.), sondern ein Referenztyp. Der Wert der Variable ist also entweder null oder eine Referenz auf ein Objekt.
Der Witz ist jetzt, dass eine Variable vom Typ List alle Objekte referenzieren kann, die mindestens so speziell wie List sind. In Deinem Fall also ArrayList oder LinkedList. Wenn Du Dich für die Klasse des referenzierten Objekts interessierst, kannst Du die Operation getClass() aufrufen.

```
List<String> liste = new ArrayList<String>();
System.out.println(liste.getClass().getName());
```


----------



## ARadauer (16. Jun 2008)

> das alle Collections implementieren


??? nope!
gibt auch noch andere Collections... Sets, Maps usw...

ich vermute, dass jede Collection von Collection ableitet, was wiederum von Iterable ableitet...


----------



## musiKk (16. Jun 2008)

ARadauer hat gesagt.:
			
		

> ich vermute, dass jede Collection von Collection ableitet


Richtig. Schoen naheliegend.


----------



## tfa (16. Jun 2008)

Maps sind jedenfalls keine Collections.


----------

