Problem mit Java Generics

Hauke

Mitglied
Hallo

Ich habe eine Klasse (Vektor) erst einmal ohne Generics Programmirt (intern double), jetzt Wollte ich die Klasse mit Generics Ausstatten. Da stoße ich auf ein paar Probleme. (so gut kenne ich mich bei der Entwicklung noch nicht aus, nur beim Benutzen)

Ersteinmal der Klassen Rumpf und zwei Feldern.

Java:
public class Vektor<T extends Number> implements Cloneable {
	public T[] daten;
	public final int length;
}

Zu dem „Haupt“ Konstruktoren:
Java:
	@SuppressWarnings("unchecked")
	public Vektor(int n){
		Class<?> h = Number.class;
		daten = (T[]) Array.newInstance( h, n );
		
		//T[] array = (T[])new Object[n];     
        //daten = array;  
		
		length = n;
	}
Erstellt man ein Array des Types T auch so wie bei mir im Code?
Wenn ich den einzelnen Elementen des Arrays etwas zuweise muss ich sie wohl jetzt Clonen?
Jetzt eine Frage zum Rechnen, was allgemein so aussieht:
Java:
	@SuppressWarnings("unchecked")
	public static <T extends Number> Vektor<T> operation(Vektor<T> a, Vektor<T> b, Operation op)
	{
		if (a.length != b.length){
			throw new UnequalLengthException();
		}
		int n= a.length;
		Vektor<T> ret = new Vektor<T>(n);
		
		for(int i = 0;i < n;i++){
			Double d=null;
			switch (op){
			case ADD:
				 d= (Double) (a.daten[i].doubleValue() + b.daten[i].doubleValue());
				 break;
			case MUL:
				d =  a.daten[i].doubleValue() *b.daten[i].doubleValue();
				break;
			}
			ret.daten[i] = (T) d;
			
		}
		return ret;
	}
(So ist das noch nicht richtig)
Entweder wie kann ich ein „instanceof“ machen oder schöner gibt es eine Möglichkeit mit „Number„ allgemein zu rechnen?
 
S

SlaterB

Gast
die einfachste Variante für das Array ist
> new Object[n]

wenn du schon nicht genau den aktuellen Typ T hast, dann brauchst du Number fürs Array auch nicht unbedingt,
na ok, ist schon denkbar bei manchen Verwendungen, wenn man das Array komplett herausholt

> Wenn ich den einzelnen Elementen des Arrays etwas zuweise muss ich sie wohl jetzt Clonen?
nicht zwingend, und da Number normalerweise unveränderbar wie Strings sind, eigentlich gar nicht nötig


-----------

Java:
            case ADD:
                 d= (Double) (a.daten[i].doubleValue() + b.daten[i].doubleValue());
                 break;
            case MUL:
                d =  a.daten[i].doubleValue() *b.daten[i].doubleValue();
willst du noch 5x weiter 'a.daten.doubleValue()' usw. schreiben?
sieht ja jetzt schon schlimm aus, besser:
Java:
double da = ..;
double db = ..;

            case ADD:
                 d= (Double) (da + db);
                 break;
            case MUL:
                d =  da *db;
usw., der Cast auf Double ist wohl auch nicht nötig?

wenigstens hattest du bisher schon d als Ergebnis und nicht ständig noch ret.daten..
 
S

Spacerat

Gast
@SlaterB: Ich hoff' das "normalerweise" spielt ausschliesslich auf die in der Standard-VM vorhandenen Number-Klassen an. Ansonsten ist Number nämlich abstract und jeder kann's verwenden wie er will, also auch, Gott beware, mutable Numbers erzeugen.

Das Datenarray des Vectors darf auf jedenfall vom Typ [c]Number[][/c] sein nur rechnen kann man damit afaik leider auch nicht.
 
S

SlaterB

Gast
so meinte ich das mit normalerweise, ja,

ach ja, selbst new Number[n] kann man direkt hinschreiben, bei fester Klasse braucht es kein 'Array.newInstance'
 

Hauke

Mitglied
OK, bisschen habe ich mir das schon gedacht, nur währe dann gut zu Prüfen, welcher Type Double, Float, BigDecimal etc. ist damit auch gerechnet werden kann. Ich will ja nicht immer nach Double Casten sondern, wenn ich z. B. BigDecimal habe damit rechnen, das ist meine eigentliche Fragen (
Code:
if(T isInstanceOf BigDecimal)
) so etwas in der Richtung.
 
S

SlaterB

Gast
T kannst du nicht testen, nein, entweder muss Class<T> anfangs mit übergeben werden oder ein Objekt,
am Anfang ein Dummy bzw. später einen der Werte anschauen

schön wird so eine Verzweigung kaum, eine Alternative kann ich aber auch nicht wirklich nennen
 
S

Spacerat

Gast
Das übergeben eines Dummies ist beim Rechnen ja gar nicht so schwer. Ich habe mal spasseshalber mit 'ner Number-Kompatiblen Lib angefangen, ein Auszug daraus sieht etwa so aus:
Java:
public static <T extends Number> T sqrt(T i)
{
	return convert(i, BigDecimalMath.sqrt(toBigDecimal(i)));
}

public static <T extends Number> T pow(T x, Number y)
{
	return convert(x, BigDecimalMath.pow(toBigDecimal(x), toBigDecimal(y)));
}

@SuppressWarnings("unchecked")
public static <T extends Number> T convert(T out, Number in)
{
	return (T) ((out instanceof Double)? toDouble(in) :
		(out instanceof Float)? toFloat(in) :
			(out instanceof Long)? toLong(in) :
				(out instanceof Integer)? toInteger(in) :
					(out instanceof Short)? toShort(in) :
						(out instanceof Byte)? toByte(in) :
							(out instanceof BigDecimal)? toBigDecimal(in) :
								(out instanceof BigInteger)? toBigInteger(in) :
									in);
}
Die einzelnen to-Methoden sind ein Klacks, im Gegensatz zu den BigDecimal-Methoden "pow" und "sqrt" aus dem Beispiel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Java modul Problem Allgemeine Java-Themen 4
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
Seikuassi Input/Output Java transferTo ByteArrayOutputStream-Problem Allgemeine Java-Themen 4
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
B Best Practice Java Zugriffsrechte Problem Allgemeine Java-Themen 2
B Java Zahlenausgabe Problem Allgemeine Java-Themen 6
N Problem mit Java Sperrlisten Allgemeine Java-Themen 0
F Java Spiel Sprung problem Allgemeine Java-Themen 5
G JavaFX Problem nach Update auf Java 8 Allgemeine Java-Themen 0
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
M Problem mit (etwas komplizierterem) Java Programm Allgemeine Java-Themen 14
W Java Logging Problem Allgemeine Java-Themen 3
K java problem Allgemeine Java-Themen 5
B java.io.IOException: Problem reading font data. Allgemeine Java-Themen 9
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
I Java als Dienst Problem Allgemeine Java-Themen 2
F Problem mit Java 7 und Proguard Allgemeine Java-Themen 6
L Input/Output Java und CMD Problem Allgemeine Java-Themen 3
C Java Server Pages Problem Allgemeine Java-Themen 6
M Lego Nxt und Java Problem Allgemeine Java-Themen 8
S Perfomance Problem mit Java Applikation Allgemeine Java-Themen 4
G Problem Java Mail API: CC wird nicht berücksichtigt Allgemeine Java-Themen 7
P Problem mit Java Web Start Allgemeine Java-Themen 1
J Eclipse Java Build Path / Java Problem??? Allgemeine Java-Themen 13
B USB-I2C Adapter JAVA problem Allgemeine Java-Themen 6
D Problem mit java.sql.Timestamp Allgemeine Java-Themen 2
L Problem mit Hintergrund bei JAVA Applet Allgemeine Java-Themen 27
D Problem mit Java version? Allgemeine Java-Themen 4
P Zip Problem in Java Allgemeine Java-Themen 4
N Kleines nicht java Problem Allgemeine Java-Themen 7
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
V Java heap space Problem Allgemeine Java-Themen 8
T Problem: eclipse / Java / cyrillisch Allgemeine Java-Themen 4
D Problem mit java.util.scanner: Falsche Ergebnisse Allgemeine Java-Themen 4
S Java 5/6 Problem im Classpath Allgemeine Java-Themen 11
F Problem mit Java Listen Allgemeine Java-Themen 4
M Java applet zusammen mit DHTML z-index Problem Allgemeine Java-Themen 2
G problem mit java-editor Allgemeine Java-Themen 4
H Problem mit Java (dsound.dll) Allgemeine Java-Themen 5
E Java.net und Thread-Problem Allgemeine Java-Themen 2
S Problem mit backreference mit java und regex Allgemeine Java-Themen 7
L WindowsTrayIcon in Java 1.4 - Problem beim ausführen der JAR Allgemeine Java-Themen 2
C Java Batch Warte Problem Allgemeine Java-Themen 4
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
G Java-Problem mit Netbeans Allgemeine Java-Themen 2
J Problem mit Java Multimedia Framework Allgemeine Java-Themen 6
G Problem mit Java Fenstern Allgemeine Java-Themen 2
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
B java problem - speichern Allgemeine Java-Themen 9
G Problem mit java.lang.reflect.Field Allgemeine Java-Themen 15
G java! Problem mit Chat-Applet Allgemeine Java-Themen 3
S Problem beim Bearbeiten von Java-Dateien unter Linux Allgemeine Java-Themen 3
R Browser-Problem nach Java-Update Allgemeine Java-Themen 9
D (gelöst) Java-Problem bei freemind mit fedora core 4 Allgemeine Java-Themen 9
G Java Server Faces - Problem Allgemeine Java-Themen 2
L-ectron-X Problem mit Collections.sort() mit Java 1.5 Allgemeine Java-Themen 9
C Hilfe! Java Control Panel & Limewire Problem! Allgemeine Java-Themen 3
A Probleme bei der Berechnung von Pi! Java Problem Allgemeine Java-Themen 2
G jTable-Problem --> java.lang.OutOfMemoryError Allgemeine Java-Themen 5
T JAVA+SQL=Mysteriöses Problem Allgemeine Java-Themen 3
P java exe erstellen problem Allgemeine Java-Themen 3
N Java Problem mit WIN ME Allgemeine Java-Themen 2
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
D Read JSON File Problem Allgemeine Java-Themen 9
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben