# Funktion mit beliebigen Zahlentypen



## Wolfsbein (22. Oktober 2004)

Halloo

ich brauche eine Funktion, nennen wir sie compute(), die zwei Zahlenparameter empfängt. Dabei soll es egal sein, welcher Zahlentyp das ist. Er soll nur beidemale gleich sein. Wenn die Parameter Klassen wären, würde ich es mit einem Interface machen. Nur leider ist dem nicht so. Gibt es also einen Obertyp für Zahlen, den ich verwenden kann? Danke.


----------



## Vincentius (22. Oktober 2004)

Alle Klassen in Java, die Zahlen representieren (Integer, Float usw), erben von der abstrakten Klasse *java.lang.Number*.


----------



## Thomas Darimont (22. Oktober 2004)

Hallo!

Unter Java 5 kannst du dank Auto-Boxing (oder leider) folgendes machen:

```
public class NumberTest {

	public static void main(String[] args) {
		new NumberTest().doIt();
	}

	private void doIt() {
		System.out.println(test(new Integer(1),new Integer(1)));
		System.out.println(test(90L,10L));
		System.out.println(test(1.0D,3.141592654D));
		System.out.println(test(10,20));
		
	}
	
	private Number test(Number a, Number b){
		if(a instanceof Integer && b instanceof Integer)
			return plus((Integer)a,(Integer)b);
		if(a instanceof Long && b instanceof Long)
			return plus((Long)a, (Long)b);
		if(a instanceof Double && b instanceof Double)
			return plus((Double)a, (Double)b);
		return new Integer(0);
	}
	
	private int plus(int a, int b){
		return a + b;
	}
	
	private double plus(double a, double b){
		return a + b;
	}
	
	private long plus (long a, long b){
		return a + b;
	}
}
```

Ausgabe:
2
100
4.141592654
30

Gruß Tom


----------



## Wolfsbein (22. Oktober 2004)

Java 5 kann ich leider nicht verwenden. Und die Numberklasse wäre eine Lösung. Nur leider nicht für mich. Also muss ich das ganze auf einen Zahlentyp beschränken. Trotzdem danke.


----------



## Thomas Darimont (22. Oktober 2004)

Du könntest natürlich auch hingehen und die Methode compute für alle Möglichen Typen überladen...

Gruß Tom


----------



## Snape (22. Oktober 2004)

Wolfsbein hat gesagt.:
			
		

> Java 5 kann ich leider nicht verwenden. Und die Numberklasse wäre eine Lösung. Nur leider nicht für mich.



Warum nicht, wenn ich fragen darf?


----------



## Wolfsbein (22. Oktober 2004)

Das Programm ist nur für die Uni. Und weil der Code automatisch kontrolliert wird, sind die Schnittstellen fest. Also das Programm schreibt nun mal keinen Integer, sondern einen int in die Parameterliste. Und der Compiler ist ein 1.4er.
Die Methoden überladen halte ich für eine sehr schlechte Idee, da es nicht nur eine ist.


----------



## Thomas Darimont (22. Oktober 2004)

Viele alternativen bleiben dir aber nicht übrig....
Kommen denn dort nur Referenz Typen vor oder können die Methoden auch Primitive als Parameter bekommen?

...ausserdem hast du nur von einer Methode gesprochen:


> ich brauche eine Funktion, nennen wir sie compute(), die zwei Zahlenparameter empfängt.



Gruß Tom


----------

