Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Implementazioni "nascoste"

    Non ho mai capito se Java mette a disposizione del programmatore le implementazioni delle sue classi. Ad esempio:
    codice:
    Desktop.getDesktop().open(new File(path));
    il metodo open(File f) avrà una sua implementazione che risulta sconosciuta o potrebbe essere visibile?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da paolovox Visualizza il messaggio
    Non ho mai capito se Java mette a disposizione del programmatore le implementazioni delle sue classi.
    La tua domanda forse è posta (perlomeno espressa) un pochino male. Il fatto che una qualunque classe (tipo in generale) e i suoi membri siano utilizzabili da te oppure no, dipende solamente dal livello di accesso della classe e dei membri.

    Le classi "top level" (non innestate) possono avere livello di accesso public oppure "package level". I membri (costruttori, metodi, classi inner/nested) possono avere livello di accesso public, protected, private o package level. Tutto dipende solo da questi.

    Quote Originariamente inviata da paolovox Visualizza il messaggio
    Ad esempio:
    codice:
    Desktop.getDesktop().open(new File(path));
    il metodo open(File f) avrà una sua implementazione che risulta sconosciuta o potrebbe essere visibile?
    Ok, prendiamo proprio il tuo esempio come ... esempio. Anche se non è dei migliori per comprendere le astrazioni/implementazioni.

    Desktop è una classe pubblica e ha una serie di metodi di istanza pubblici (open, browse, edit, .....). Se guardi la documentazione javadoc, non c'è indicato alcun costruttore. Un costruttore ci deve essere sempre e comunque e nel caso di Desktop è privato. Non è documentato perché essendo privato non fa parte della API "pubblica".

    Quindi non puoi tu istanziare Desktop, lo puoi fare solo Desktop stesso! Infatti c'è un metodo statico getDesktop() che fa da "factory" e permette di ottenere una istanza.
    Alla fin fine a chi usa Desktop non interessa sapere come sono implementati i browse, edit, ecc... né come/dove è istanziata la classe. Perché basta ottenere la istanza da getDesktop() e poi usare i metodi pubblici di istanza.
    Dietro a Desktop c'è dell'altro ... dovresti però andare a sbirciare nel sorgente di Desktop (e del framework in generale).
    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 L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    secondo me paolovox intendeva chiedere se si possono vedere i sorgenti delle classi...


  4. #4
    Si tratta dei design pattern e alcuni nascondono i costruttori, della Gang of four. Quindi è possibile sbirciare nel codice sorgente? Sarebbe utile per capire un sacco di cose. Più mi inoltro in questo mondo è più mi affascina.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da paolovox Visualizza il messaggio
    Quindi è possibile sbirciare nel codice sorgente?
    Del framework standard? Se hai un JDK installato, nella "home" del JDK dovresti avere un src.zip. Vedi anche le indicazioni qui sezione Source Code.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Si ho trovato il file src.zip ed era proprio quello che cercavo. E' sempre utile poter spogliare una classe dalla testa ai piedi. Grazie

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 © 2026 vBulletin Solutions, Inc. All rights reserved.