Methoden auf Arrays aller primitiver Typen zusammenfassen?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Moinsen!
Ich würde gerne einige Methoden schreiben, die auf Arrays aller (numerischer) primitiver Datentypen arbeiten, ohne diese für jeden primitiven Datentyp einzeln implementieren zu müssen.

Beispiel: Um das Maximum in einem Array zu bestimmen würde ich derzeit schreiben:
Code:
public static int getMax(int[] arr) {
	int max = arr[0];
	for(int i=1; i<arr.length; i++) {
		if (arr[i] > max)
			max = arr[i];
	}
	return max;
}

public static float getMax(float[] arr) {
	float max = arr[0];
	for(int i=1; i<arr.length; i++) {
		if (arr[i] > max)
			max = arr[i];
	}
	return max;
}

// ebenso für long, double, short, ...

Kann man das nicht irgendwie zusammenfassen ? Z.B. zu sowas in der Art wie (nicht lauffähiger code):
Code:
public static <T> getMax(<T>[] arr) {
	T max = arr[0];
	for(int i=1; i<arr.length; i++) {
		if (arr[i] > max)
			max = arr[i];
	}
	return max;
}

...
{
	// Aufrufe z.B. per:

	int[] A;
	...
	int m = getMax(A);

	float[] B;
	...
	float f = getMax(B);

}
Ich habe da nun etwas mit Reflections herumprobiert, aber nichts brauchbares gefunden.
Einmal scheiterte es lediglich daran, dass man nicht von z.B. int[] nach Integer[] oder Object[] casten kann.

Hat da wer eine Idee oder ein Patentrezept ?
 

Kim Stebel

Bekanntes Mitglied
Ist doch ganz einfach.;)
Vielleicht mal Suns Generics-Tutorial lesen...
Code:
public class Test<T extends Number>
{
  public T getMax(T[] arr) { 
    T max = arr[0]; 
    for(int i=1; i<arr.length; i++) { 
       if (arr[i].longValue() > max.longValue()) 
          max = arr[i]; 
    } 
    return max; 
  }

  public static void main(String... args)
  {
    Test<Integer> t = new Test<Integer>();
    Integer[] ints = {1,2,3,4};
    System.out.println(t.getMax(ints));
   
    
    
  }
 
}
 
G

Gast

Gast
Das löst das Problem aber nicht wirklich, da zwar von int nach Integer und damit auch nach Number gecastet wird, aber nicht von int[] nach Integer[] und damit auch nicht nach Number[].

Am einfachsten wäre wohl, im ganzen Programm die Bufferclasses zu verwenden. Bei der Verwendung von für primitive Datentypen gedachten Operatoren (+, -, /, *) sollte das keine Probleme geben, da automatisch gecastet wird, sicher bin ich mir aber nicht.
 

Kim Stebel

Bekanntes Mitglied
Man kann doch einfach ne kleine Helper-Funktion schreiben, die X-Arrays in Y-Arrays umwandelt. Also halt ein neues Array des passenden Typs erstellt. Dann überlädt man getMax() und ruft erst die Helper-Funktion auf.
Das ist natürlich alles eher unelegant...Aber da führt in Java wohl kein weg dran vorbei.
 

kopfsalat

Bekanntes Mitglied
@Kim
So ähnlich habe ich es bereits gehabt, aber das klappt nicht mit primitiven Datentypen.
Z.B. geht weder:
Code:
Test<Integer> t = new Test<Integer>();
int[] ints = {1,2,3,4};
System.out.println(t.getMax(ints));
noch
Code:
Test<int> t = new Test<int>();
int[] ints = {1,2,3,4};
System.out.println(t.getMax(ints));

Das ist natürlich alles eher unelegant...Aber da führt in Java wohl kein weg dran vorbei.
Yo, das wäre ganz schöne Platzverschwendung ;-)

@Gast
Mit den 'Bufferclasses', bzw. 'Wrapperklassen', bspw. 'Integer' statt 'int', etc. gibt es mit den Operatoren wirklich kein Problem, da z.B.
Code:
Integer c = a + b;
ohne weiteres funktioniert.

Allerdings bedeutete das bei großen Arrays Geschwindigkeitseinbußen und Platzverschwendung.
Siehe dazu hier: http://www.java-forum.org/de/viewtopic.php?p=334885#334885

Zudem möchte ich meine Funktionen als Bibliothek in Projekten nutzen, in denen aus diesen Performancegründen Arrays primitiver Datentypen genutzt werden.

Hat noch wer eine Idee ?
 
S

SlaterB

Gast
es geht einfach nicht, schau dir z.B. die Arrays-Klasse an

static int binarySearch(byte[] a, byte key)
Searches the specified array of bytes for the specified value using the binary search algorithm.

static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
Searches a range of the specified array of bytes for the specified value using the binary search algorithm.

static int binarySearch(char[] a, char key)
Searches the specified array of chars for the specified value using the binary search algorithm.

static int binarySearch(char[] a, int fromIndex, int toIndex, char key)
Searches a range of the specified array of chars for the specified value using the binary search algorithm.

static int binarySearch(double[] a, double key)
Searches the specified array of doubles for the specified value using the binary search algorithm.

static int binarySearch(double[] a, int fromIndex, int toIndex, double key)
Searches a range of the specified array of doubles for the specified value using the binary search algorithm.

static int binarySearch(float[] a, float key)
Searches the specified array of floats for the specified value using the binary search algorithm.

static int binarySearch(float[] a, int fromIndex, int toIndex, float key)
Searches a range of the specified array of floats for the specified value using the binary search algorithm.

static int binarySearch(int[] a, int key)
Searches the specified array of ints for the specified value using the binary search algorithm.

static int binarySearch(int[] a, int fromIndex, int toIndex, int key)
Searches a range of the specified array of ints for the specified value using the binary search algorithm.

static int binarySearch(long[] a, int fromIndex, int toIndex, long key)
Searches a range of the specified array of longs for the specified value using the binary search algorithm.

static int binarySearch(long[] a, long key)
Searches the specified array of longs for the specified value using the binary search algorithm.

static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
Searches a range of the specified array for the specified object using the binary search algorithm.

static int binarySearch(Object[] a, Object key)
Searches the specified array for the specified object using the binary search algorithm.

static int binarySearch(short[] a, int fromIndex, int toIndex, short key)
Searches a range of the specified array of shorts for the specified value using the binary search algorithm.

static int binarySearch(short[] a, short key)
Searches the specified array of shorts for the specified value using the binary search algorithm.

static <T> int
binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator<? super T> c)
Searches a range of the specified array for the specified object using the binary search algorithm.

static <T> int
binarySearch(T[] a, T key, Comparator<? super T> c)
Searches the specified array for the specified object using the binary search algorithm.
 

kopfsalat

Bekanntes Mitglied
Ich hoffte, dass die häufige Überladung dieser Methoden noch ein Relikt aus 1.4.* und ggf. zur Abwärtskompatibilität vorhanden war, zu dem seit Reflections eine Alternative existiert. Noch gebe ich die Hoffnung nicht auf...

Bevor ich dann schließlich alles doch per Hand dupliziere schreibe ich mir dann aber lieber einen Mini-Präprozessor, welcher durch simple Textersetzungen und -wiederholungen aus einer Template-Methode entsprechende Methoden der Java-Klasse generiert.
 
B

bygones

Gast
mhm... du machst ein wesentlich komplexeres und aufwaenderigeres System nur weil du zu faul bist n bisschen copy & paste zu machen ?

naja
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
MiMa Rekursive Methoden Allgemeine Java-Themen 3
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
K Auf Methoden der Runnable Klasse zugreifen Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
D Passende Name für Methoden finden Allgemeine Java-Themen 3
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
GianaSisters ArrayList in Methoden übergeben Allgemeine Java-Themen 3
S static methoden Allgemeine Java-Themen 9
J coole Methoden Allgemeine Java-Themen 6
R Methoden in einem Thread unterschiedlich oft ausführen Allgemeine Java-Themen 4
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
P Methoden und Werte Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben