# Methode allgemein zugänglich machen - Eclipse



## Silvascus (29. Feb 2016)

Hallo,

ich wollte fragen, ob es möglich ist eine Methode zu erstellen, die man aus jedem Java Projekt aufrufen kann z.B finde ich es immer ziemlich umständlich bei Feldern/Arrays jedes mal eine Schleife zu machen, nur um deren Speicher abzurufen:


```
for(int i = 0; i < arr.length, i++)
    System.out.println(arr[i});
```

Man könnte doch viel einfacher eine Methode erstellen:


```
public static void printArray ( int[] arr)
{
    for(int i = 0; i < arr.length, i++)
        System.out.println(arr[i]);
}
```

Ich weiß jedoch nicht, wie oder ob es möglich ist diese quasi in Java zu implementieren, sodass ich von jedem Java programm, dass ich in Zukunft schreibe auf diese Methode zugreifen kann (ähnlich, wie bei Math.<Methode>)


MfG


----------



## mrBrown (1. Mrz 2016)

Ja, gibt es. Du kannst das als Jar exportieren und diese in anderen Projekten als lib nutzen (In Eclipse "Add External Archives").

Aber mMn ist es grad bei solchen Dingen überflüssig und eher noch Quelle für Fehler, als Arbeitserleichterung.

Um Arrays zu Printen, gibts übrigens Arrays.toString() oder mit Java 8
Arrays.stream(array).forEach(...), womit sich auch je nach Bedarf passend printen lässt, ohne sichtbare Schleife.


----------



## kneitzel (1. Mrz 2016)

Und wenn man das selbst implementieren will, dann muss die Funktion natürlich in eine Klasse. Du kannst also eine Klasse ArrayUtils oder so erstellen und die Funktion dort hinzu fügen.

Damit das halbwegs sauber ist, packst Du es noch in einen vernünftigen Namespace. 

Und dann - wie mrBrown schon erwähnt hat - sollte daraus dann ein jar erstellt werden, welches Du dann bei anderen Projekten mit einbinden kannst.

Das ist dann das Vorgehen, welches die ganzen Libraries machen, nur eben sind es da dann halt meist deutlich mehr Klassen und Namespaces.

Und was die Alternative Arrays.toString() evtl. etwas deutlich macht: Du sollest versuchen, verschiedene Dinge nicht zu sehr zu vermischen. Diese Funktion erstellt erst einmal einfach nur einen String. Den kannst Du dann ganz universell verwenden. Das Ergebnis kannst Du ausgeben (Auf der Konsole, in einem Fenster, ...) oder in einen Stream schreiben (Datei, Netzwerk, ...)
Deine Implementation ist dagegen sehr limitiert und kann die Daten nur auf System.out ausgeben.
wenn Du eine Funktion erstellen willst, dann sollte diese möglichst allgemein sein, damit die Anzahl der Anwendungsmöglichkeiten möglichst groß ist. Eine mögliche Anpassung könnte so z.B. sein, dass Du den PrintStream (das ist System.out - out ist eine Instanzvariable von System vom Typ PrintStream) auch als Parameter mitgibst:

```
public static void printArray ( int[] arr, PrintStream stream)
{
    for(int i = 0; i < arr.length, i++)
        stream.println(arr[i]);
}
```
Das lässt sich aber nun noch weiter treiben. PrintStream ist schon recht speziell - evtl. kann man ja noch einen anderen allgemeineren Stream nutzen.... 

Das nur um einmal aufzuzeigen, wie Du so Libraries erstellen kannst.

Und ich würde Dir empfehlen, dies einfach einmal zu versuchen. Erstell Dir ein Projekt für Deine eigene Library. Und dann überleg weiter fleissig, was man da so rein stecken kann von Deinem Code und vielleicht auch immer, was Du noch anpassen kannst, um die Funktion möglichst universell zu halten.

mrBrown hat Recht: Das wird in der Praxis kaum Relevanz haben. Aber das ist auf jeden Fall eine gute Übung. Und mit der Zeit kommen dann auch Dinge hinzu, die für Dich sinnvoll sind. Und andere Dinge fliegen dann evtl. raus, da es im Framework besseres gibt und Du es dann entdeckt hast.


----------



## Silvascus (1. Mrz 2016)

Cool, danke, werde ich direkt mal ausprobieren!


----------

