Banalmente una classe statica

di il
3 risposte

Banalmente una classe statica

Salve,
devo dichiarare una classe statica, basta aggiungere public "static" class identificatoreClasse ?
e le variabili di classe - diciamo che abbiamo un metodo che restituisce la somma di due numeri - di conseguenza dovranno essere statiche così come il metodo? dovrà avere un costruttore? grazie

3 Risposte

  • Re: Banalmente una classe statica

    WinstonSmith ha scritto:


    devo dichiarare una classe statica, basta aggiungere public "static" class identificatoreClasse ?
    e le variabili di classe - diciamo che abbiamo un metodo che restituisce la somma di due numeri - di conseguenza dovranno essere statiche così come il metodo? dovrà avere un costruttore? grazie
    Alt, attenzione. Una classe "statica" può solamente essere contenuta DENTRO un'altra classe. Una normale classe ("top-level") NON può essere marcata static.

    Quindi es.
    public class ClasseContenitore {        // ClasseContenitore NON può essere static
        public static class ClasseContenuta {      // Ok
        }
    }
    Se ClasseContenuta NON fosse static, sarebbe una "inner class" che è una cosa ben diversa da una nested (static) class.
    Ma ClasseContenuta come static non ha nulla di speciale, nel senso che ClasseContenitore è solo come se fosse un "namespace" in più "sopra" di ClasseContenuta. E per ClasseContenuta varrebbero tutte le normali regole per le classi.

    Ma se devi solo avere dei metodi static, allora NON ti serve una classe nested (static). Se dovessi fare solo una classe con metodi di "utilità" (come la classe java.lang.Math), allora normalmente si mette un costruttore privato (che impedisce la istanziazione) e poi i metodi static.
  • Re: Banalmente una classe statica

    Grazie come al solito per le delucidazioni.
    Però sono confuso... In pratica ho un metodo con corpo vuoto e return null (dovrebbero farci vedere qualcosa che ha a che fare con i test). Mi è stato detto per ora di fare una classe statica, e di mettere come return di quel metodo un oggetto di questa classe statica... Quindi creo una classe con al suo interno una classe statica?
  • Re: Banalmente una classe statica

    WinstonSmith ha scritto:


    Grazie come al solito per le delucidazioni.
    Però sono confuso... In pratica ho un metodo con corpo vuoto e return null (dovrebbero farci vedere qualcosa che ha a che fare con i test). Mi è stato detto per ora di fare una classe statica, e di mettere come return di quel metodo un oggetto di questa classe statica... Quindi creo una classe con al suo interno una classe statica?
    Purtroppo non è molto chiaro cosa devi fare e perché. Ma ti ripeto che se devi fare una classe con soli metodi di "utilità", si fa così: una normale classe, costruttore esplicito privato per impedire la istanziazione e poi 1..N metodi statici.

    Ad esempio, una classe di "utilità" per le stringhe con un metodo per ripetere una stringa n volte.
    public class MyStringUtils {
        private MyStringUtils() {}     // impedisce la istanziazione dall'esterno
    
        public static String repeat(String str, int count) {
            StringBuilder buf = new StringBuilder(str.length() * count);
    
            for (int i = 0; i < count; i++) {
                buf.append(str);
            }
    
            return buf.toString();
        }
    }
    Con:
    System.out.println(MyStringUtils.repeat("ciao", 3));

    stampa ciaociaociao

    Poi i metodi della classe MyStringUtils sono anche facilmente testabili con degli unit-test, se si volesse.
Devi accedere o registrarti per scrivere nel forum
3 risposte