Methoden methoden an generischen klassentyp anpassen

loniJ

Neues Mitglied
wie kann ich in java methoden an den den typ einer generischen klasse anpassen ?

zb habe ich die klasse Vector in welcher werte als array gespeichert werden. werte können vom typ double int long und dem typ Bruch bestehen. bruch ist eine eigenständige klasse.

ich möchte jetzt in einer methode aus Vector unterscheiden ob mein vector aus double int long oder eben aus Bruch-werten besteht.

Java:
public class genericVector<T> {
    private T[]Vector;
    
    public genericVector(int laenge){
        Vector = (T[])new Object[laenge];
    }

    public void methode(){
        if (Vector.getClass()==Double.class){ // funktioniert nicht
           //do something    
        }else
         ....
    }
    ....
}
 
Zur Laufzeit gar nicht, außer wenn man ein Class-Objekt mit übergibt
Java:
class GenericVector<T>
{
    private final Class<T> contentType;
    
    public GenericVector(int laenge, Class<T> contentType)
    {
    ...
    }

Aber... nebenbei: Arrays und Generics mögen sich nicht, was spricht gegen eine List<T>? (und... was spricht gegen Naming Conventions...? 😉 )
 
Hab das grad mal ausprobiert.... war eher zufällig, aber klappt:

Java:
		Double test = 0D;
		Integer test2 = 0;
		Long test3 = 0L;

		System.out.println(test.getClass().getSimpleName());
		System.out.println(test2.getClass().getSimpleName());
		System.out.println(test3.getClass().getSimpleName());

Ergibt:

Code:
Double
Integer
Long

..aber mit primitiven Datentypen läuft das glaube nicht - also Integer statt int verwenden 😉

[EDIT]Aber ich muss Marco Recht geben - ne Liste wär eh schöner![/EDIT]
 
dreh doch das ganze einfach um und frag den Datentyp selbst, ob er ein Bruch ist oder nicht.


Java:
public interface MyDatatype{

boolean isFraction();
}

public class Zahl implements MyDatatype {

public boolean isFraction(){
return false;
}

}

public class Bruch implements MyDatatype {

public boolean isFraction(){
return true;
}

}

public class GenericVector<T extends MyDatatype> {

public void doSomething(){
T element = getElement();
if(element.isFraction()){
 // handle fraction
} else {
 // handle number
}

}
 
Würde das ganze nicht auch mit

Java:
T element = getElement();
if (T instanceof Double) { 
....

funktionieren?
 
element instanceof Double
würde prinzipiell funktionieren, aber da muss man genau aufpassen. Im dümmsten Fall GIBT es kein erstes Element, oder es ist 'null'

Ganz allgemein sieht sowas wie
Java:
if (type == typeA) doA();
if (type == typeB) doB();
if (type == typeC) doC();
...
egal ob man es mit instanceof, getClass, einer Type-Enum oder sonstwie macht, für mich aber erstmal IMMER nach einem Fall aus, wo man statt der expliziten Typabfrage lieber Polymorphie verwenden sollte.
 

Neue Themen


Zurück
Oben