Methoden Methode auf Array aufrufen, und dieses Array dabei ändern?

Willibergi

Mitglied
Moin,
ich habe folgenden Code:
Java:
public int[] foo(){
       
}
Die Methode möchte ich auf ein Array anwenden, und dabei z. B. den Eintrag mit dem Index 0 auf 12 setzen.
In JavaScript würde ich
Code:
this[0] = 42;
schreiben, in Java bezieht sich das this aber offensichtlich auf meine Klasse.
Wie kriege ich das nun hin, dass in der Methode, das Array verändert wird, bei dem die Methode aufgerufen wird?
LG Willibergi
PS: Ich weiß, dass ich auch eine void-Methode mit Übergabe einer Referenz zum Array hätte erstellen können. Ich möchte aber etwas wie array.foo() erstellen. 😉
 
Das ist in Java nicht möglich. Du kannst einem Array nicht eine neue Methode "hinzufügen".

Eine Möglichkeit wäre vielleicht eine statische Methode, welcher du das Array übergibst und welche die gewünschten Änderungen vornimmt.
 
Ich weiß nicht ob ich dich ganz verstanden hab. Also für mich klang das so als würdest du gerne an den stellen 0 und 12 in einem Array einen Wert setzen. Und dafür willst du eine Methode haben.
Die Sinnhaftigkeit ist natürlich fragwürdig, aber das würde wie folgt gehen:
Java:
public void foo(int[] arr, int value, int indices...) {
    for(int index : indices) {
        arr[index] = value;
    }
}
Aufruf:
Java:
foo(new int[20], 42, 0, 12);

Zur erklärung, du hast eine variable liste von indices (...) und die durchläufst du. In dieser befinden sich aktuell zwei Werte (0,12) an den Stellen wird dann im Array der übergebene Wert 42 gesetzt. Statt new int[20] kannst du natürlich auch einfach ein anderes Array übergeben, das du vorher deklariert hast.

Vielleicht erklärst du was du eigentlich genau machen willst, ohne Code zu benutzen
 
Der von mir gepostete Quellcode ist natürlich nicht das, was ich machen möchte - er sollte nur zur Darstellung dienen.

Ich wollte nur, wie Joose schon erkannt hat, einem Array eine Methode hinzufügen, auf die ich dann mit

Java:
arr.foo();

zugreifen kann.

Aber wenn ich das richtig verstanden habe, ist das ohnehin nicht möglich, und ich muss auf eine Void-Methode zurückgreifen und ihr die Referenz übergeben.
 
Ah, das sieht noch nett aus. Aber ich denke, sollte man in Java irgendwann mal den Schritt endlich wagen, primitive Datentypen abzuschaffen und rein Objektorientiert zu werden, kann man auch ohne Lombock einfach die jeweilige Klasse erweitern.
Auch wenn ich den Code recht nett finde!

#edit: Der Code-Schnipsel erweitert aber auch "nur" Arrays und nicht den quasi primitiven Datentyp einer array-Referenz (ich weiss gerade nicht, wie ich sprachlich die Klasse Arrays von dem array mit [] distanzieren soll 😕)

Und noch etwas: Solche Erweiterungen kann man IMHO auch mit noch einem anderen Mittel erreichen: Runtime Bytecode Generation / Manipulation á la Byte Buddy
 
#edit: Der Code-Schnipsel erweitert aber auch "nur" Arrays und nicht den quasi primitiven Datentyp einer array-Referenz (ich weiss gerade nicht, wie ich sprachlich die Klasse Arrays von dem array mit [] distanzieren soll 😕)

Es wird doch int[] erweitert um die Methoden aus Arrays, die int[] nehmen. In dem Beispiel wird #sort auf dem int[] aufgerufen.
 

Neue Themen


Zurück
Oben