Creare un metodo globalmente visibile per un'API

3

Sto provando a creare un'API Java che utilizzerò in altri progetti.

Capisco che se creo nuove classi posso creare oggetti negli altri progetti che hanno queste classi. Ma quello che voglio in questo momento è un modo per creare un metodo che non fa parte di un oggetto che posso richiamare quando desidero senza dover creare un nuovo oggetto.

Quindi, quello che sto chiedendo è, come potrei creare un metodo come questo in cui posso passare i parametri da un altro progetto e il progetto API farà tutto ciò che ho inserito nel metodo che coinvolge quei perimetri? Devo rendere i metodi statici o cosa?

Quando provo ad accedere alla classe solo con il nome della classe e poi a importare quella classe dall'api, non mi consente di utilizzare un metodo vuoto pubblico che ho creato.

    
posta DITTO 05.09.2015 - 19:06
fonte

2 risposte

2

Sì, un metodo statico è ciò di cui avrai bisogno per questo. Un esempio di un metodo statico è java.lang.Thread.currentThread() .

Tuttavia, si tenga presente che i metodi statici sono di solito una cattiva idea e meglio evitati. Inoltre, si tenga presente che sono soprattutto le persone nuove alla programmazione che sono inclini a fare un cattivo uso dei metodi statici. Quindi, se sei nuovo alla programmazione, probabilmente sei un ottimo esempio di qualcuno che sta facendo un cattivo uso dei metodi statici.

Ti consiglierei di sederti e riflettere sul modo in cui potresti rendere questo un metodo normale ("istanza") di un oggetto normale. I tuoi "altri progetti" creerebbero un'istanza di quell'oggetto e invocheranno i suoi metodi.

Se devi assolutamente utilizzare metodi statici, dovresti comunque ridurli o nasconderli.

Per ridurre al minimo i metodi statici, considera singleton pattern : dichiara solo un metodo statico chiamato getTheOneAndOnlyInstanceOfMyObject() e fagli restituire un oggetto contenente metodi non statici ("istanza") che possono essere richiamati dai tuoi "altri progetti".

Per nascondere i metodi statici, crea un oggetto facciata che i tuoi "altri progetti" possono istanziare e invocare, e poi fare in modo che questo oggetto di facciata invochi internamente i metodi statici.

Modifica

Per una discussione sul perché i metodi statici possono essere (o sono potenzialmente) negativi, vedi questa risposta: link

    
risposta data 05.09.2015 - 19:29
fonte
2

Non utilizzare il metodo statico se contiene uno stato globale. È un cattivo design. Ma i metodi statici pubblici sono utili per classi / metodi "utili" con nessuno stato tra le chiamate di metodo . java.lang.Thread.currentThread() non è un buon esempio. Collections.sort() è molto meglio. Svantaggi come menzionato:

  1. È difficile prenderli in giro nei test unitari. Ma di solito non lo fai. Contiene un "algoritmo" e non contiene alcun stato (nessuna dipendenza esterna).
  2. Non puoi eseguire l'override del metodo statico per sottoclasse. Questo può essere un caso. Quindi considera queste due opzioni nella tua API. Non evitare metodi statici solo perché Java è un linguaggio orientato agli oggetti.
risposta data 06.10.2015 - 16:59
fonte

Leggi altre domande sui tag