Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216

    [Java] argomenti dei metodi incoerenti

    non capisco queste righe di codice dagli appuntidel mio pof.
    Un metodo:

    public void metodo1(String s) throws Exception{

    File file = new File(s);
    Scanner scan = new Scanner(file);
    Class1 c1 = Class1.metodoStatico(scan);
    ...
    }


    ora, il prototipo metodo metodoStatico della classe Class1 è:

    public static Class1.metodoStatico(BufferedReader br) throws IOException

    ma non c'è coerenza tra gli argomenti o cmq tale codice non funziona; non dovrei creare un BufferedReader da passare a metodoStatico? O avere un prototipo del tipo
    public static Class1.metodoStatico(Scanner in)??

    inltre se nel metodo statico vado a fare in.next() sarebbe da evitare il parametro di tipo Scanner perché commetto un effeto collaterale che in qualche modo potrei evitare, giusto?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] argomenti dei metodi incoerenti

    Originariamente inviato da raff5184
    public void metodo1(String s) throws Exception{

    File file = new File(s);
    Scanner scan = new Scanner(file);
    Class1 c1 = Class1.metodoStatico(scan);
    ...
    }


    ora, il prototipo metodo metodoStatico della classe Class1 è:

    public static Class1.metodoStatico(BufferedReader br) throws IOException

    ma non c'è coerenza tra gli argomenti
    Sì ... in effetti non è affatto coerente. Scanner e BufferedReader sono classi che non sono in relazione tra di loro (Scanner non è-un BufferedReader e nemmeno il contrario).
    Tecnicamente si può creare uno Scanner passando un Readable e BufferedReader da Java 5 è-un Readable. Ma la cosa finisce lì, mi sembra.

    Originariamente inviato da raff5184
    non dovrei creare un BufferedReader da passare a metodoStatico? O avere un prototipo del tipo
    public static Class1.metodoStatico(Scanner in)??

    inltre se nel metodo statico vado a fare in.next() sarebbe da evitare il parametro di tipo Scanner perché commetto un effeto collaterale che in qualche modo potrei evitare, giusto?
    A dire il vero non ho affatto idea di cosa devi fare o cosa ti sia stato richiesto o cosa pensava di fare il tuo prof. Forse è meglio se chiarisci con il prof. ... senza sapere qualcosa di più non saprei proprio come aiutarti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216

    cosa devo fare:

    provo a spiegare: ho un file di testo che in genere rappresenta un elenco, tipo un elenco di studenti, nella forma
    nome cognome matricola (3 stringhe)
    nome cognome matricola

    ora una classe CalssRoom rappresenta un insieme di Studenti, mentre Studente è una classe che modella uno studente.
    Allora il programma fa questo: la classe ClassRoom crea un oggetto File a partire dal file di testo e leggendo i dati nel file dovrebbe in qualche modo (per esempio con un bufferedReader) passarli al metodo statico della classe Studente per creare uno studente
    L'incongruenza che non so come eliminare è il passaggio delle informazioni al metodo statico Studente.read(???)

    ps. uso Java 5 quindi non penso di dover usare tutto il casino di FileInputStream, InputStreamReader....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: cosa devo fare:

    Originariamente inviato da raff5184
    provo a spiegare: ho un file di testo che in genere rappresenta un elenco, tipo un elenco di studenti, nella forma
    nome cognome matricola (3 stringhe)
    nome cognome matricola

    ora una classe CalssRoom rappresenta un insieme di Studenti, mentre Studente è una classe che modella uno studente.
    Fin qui tutto perfetto ... insomma "quadra".

    Originariamente inviato da raff5184
    Allora il programma fa questo: la classe ClassRoom crea un oggetto File a partire dal file di testo e leggendo i dati nel file dovrebbe in qualche modo (per esempio con un bufferedReader) passarli al metodo statico della classe Studente per creare uno studente
    Sei sicuro che debba essere la classe ClassRoom a dover gestire la lettura da file?? Cerca sempre di non far fare ad una classe più cose rispetto invece a quello che è o "rappresenta" la classe. La classe ClassRoom è solo una semplice collezione di oggetti Studente che si "modella" sul comportamente di una qualche collezione? Allora lasciala come tale e fai una classe ClassRoomReader che si occupa di leggere il file e creare/riempire un oggetto ClassRoom.
    Qui però sono più questioni di "design" ... bisognerebbe vedere meglio i requisiti e le necessità.

    Originariamente inviato da raff5184
    L'incongruenza che non so come eliminare è il passaggio delle informazioni al metodo statico Studente.read(???)
    In Studente avrebbe senso mettere un metodo statico (read() o forse meglio chiamarlo parse() o cose del genere) che riceve un String che contiene la tua riga.
    Insomma ... Studente non dovrebbe "sapere" nulla di file, stream o altro. Al massimo puoi "delegargli" il compito di parsare una stringa che contiene i dati per creare un oggetto Studente.

    Se hai presente come funziona il metodo valueOf(String s) di Integer, vedi che c'è una analogia. È Integer che "sa" quale deve essere il formato del numero e si occupa lui di parsare la stringa e di ritornare un Integer o lanciare una eccezione se non è ben formato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216
    dunque mi consigli di passare la stringa a Studente o una seria di stringhe (nome cognome matricola..). In effetti avevo pensato anche io cosi ma quel BR mi ha deviato.

    Grazie per le risposte

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da raff5184
    o una seria di stringhe (nome cognome matricola..).
    Se avessi già le stringhe separate nome ecc... allora tanto vale invocare direttamente il costruttore di Studente, insomma ... non si vedrebbe la necessità di usare un metodo statico.

    Se si usa un metodo statico per ottenere una istanza di un oggetto, in genere è perché si vuole che sia la classe a "sapere" come creare l'oggetto invece che il "client" che la usa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.