Double Float Number

userzwo

Grünschnabel
Hi leute,

bin neu hier und hoffe auf eure hilfe.
vielen dank schon mal im vorraus.

zum problem:
Ich habe eine Klasse Vektor die mein Interface IVector<Number> implmentiert
Java:
public class Vector implements IVector<Number>{...}

die klasse Vektor soll jetzt mit Listen von doubles, floats usw. arbeiten können.
wie stelle ich denn das an?
Die Klasse mit zugehörigen Konstruktor:

Java:
public class Vector implements IVector<Number>{

	private final List<Number> elements;

	public Vector( final List<Number> elements){	
		this.elements = new ArrayList<Number>( elements );
	}
}

Ich möchte nicht für jeden typ eine eigene Klasse schreiben.

vielen dank
mfg
 
Zuletzt bearbeitet:
Generische Typen könnten helfen:
Java:
public class Vector implements IVector<T>{
 
    private final List<T> elements;
 
    public Vector( final List<T> elements){    
        this.elements = new ArrayList<T>( elements );
    }
}
Somit kann nun Vector für Datentypen beliebigen typs benutzt werden:
Java:
IVector<String> stringVector = new Vector<String>();
IVector<BigDecimal> bigDecimalVector = new Vector<BigDecimal>();
IVector<Number> numberVector = new Vector<Number>();
 
Zuletzt bearbeitet:
Hi,

danke für die antworten.
also ich wollte das mit number schon eingrenzen.

ich hab damit folgendes vor:

irgendwo möchte ich einen Vektor machen, also in irgendeiner anderen klasse z.b. Test

Java:
ArrrayList<Float> elementsFloat = new ArrayList<Float>();
elementsFloat.add( 1.0f );
elementsFloat.add( 0.0f );
elementsFloat.add( 0.0f );
elementsFloat.add( 0.0f );
Vecktor vF = new Vektor(elementsFloat);

und dann halt auch

Java:
ArrrayList<Double> elementsDouble = new ArrayList<Double>();
elementsDouble.add( 1.0 );
elementsDouble.add( 0.0 );
elementsDouble.add( 0.0 );
elementsDouble.add( 0.0 );
Vecktor vD = new Vektor(elementsDouble);

beide Vektoren sollen die gleiche Klasse Vektor mit den Konstruktor nutzen können.
was ich jetzt brauche, ist das mir der Konstruktor die Fälle für die Typen Float und Double unterscheidet,
und dann jeweils einen neue ArrayList mit entsprechenden Typ erstellt, ungefähr so

Java:
public class Vector implements IVector<Number>{

private final List<Float> elementsF;
private final List<Double> elementsD;
private final List<Integer> elementsI;

public Vector( final List<Number> elements){    
     
      if( "falls die Liste elements vom Typ Float ist"){
          this.elementsR = new ArrayList<Float>( elements );
      }else if( " ..."){
           this.elementsD = new ArrayList<Double>( elements );
      }else{
           this.elementsI = new ArrayList<Integer>( elements );
      }

   }
}

könnte das funktionieren? , IRGENDWIE?

vielen dank
mfg
 
Zuletzt bearbeitet:
Wie gesagt das geht doch mit "instanceof"
Aber warum willst du denn ne neue Liste mit dem jeweiligen Typ erstellen?

hi,
ich persönlich meine ja das Doubles völlig reichen, aber der "kunde" möchte das gerne so haben.

ich hab jetzt mal folgendes versucht
Java:
public class Vector implements IVector<Number>{

  private  		List<Float> floats 		= null;
  private  		List<Double> doubles 	= null;

  public Vector( final List<Number> element){
	
   if( element.get(0) instanceof Float){
	this.floats = new ArrayList<Float>(  );
			
	for( Number n : element ){
		floats.add( (Float) n );
        }
        final List<Float> eleFloat =  new ArrayList<Float>(floats);
  }
  else{
	this.doubles = new ArrayList<Double>();
			
	for( Number n : element ){
		doubles.add( (Double) n );
	}
	final List<Double> eleDouble = new ArrayList<Double>(doubles);
  }	
}//constructor

naja, nicht gerade schön.

gut ich sehe schon das mich das nicht weiter bringen wird, und zwei
Klassen schreiben muss VektorFloat und VektorDouble.
in der Klasse Vektor sind noch etliche Methoden die ich ja dann immer
überprüfen müsste zu welchen Typ das jetzt gehört und dann
eine zweite Methode schreiben die mit den anderen Typ umgeht.
was ja einfach nur scheußlich zu lesen wäre und mich kein Stück weiter bringt.
zusätzlich noch dauernd Fallunterscheidungen.

? ODER geht das einfacher ?

Irgendwie will ich mich damit aber nicht abfinden. Wozu denn die SuperKlasse Number?
 
Hast du das pdf von zeja gelesen oder nur den Danke-Knopf gedrückt?

Java:
public class Vector<T extends Number> {

}
 
Zurück