|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
[JAVA] come è possibile questo?guardate il codice...
sono un pò occupato su più fronti ultimamente, per chi avesse notato
cmq: Codice:
Class Outer {
private class Inner1 {
Inner2 = new Inner2();
}
private class Inner2 {
}
}
come può Inner1 instanziare un oggetto della classe Inner2 dichiarata PRIVATE? |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 4203
|
Quote:
a parte qualche errorino: Quote:
|
||
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
-non è visibile all'esterno della classe che la contiene se "protected": -è visibile dalla classe di definizione e dalle sue sottoclassi -è visibile dalle classi che appartengono allo stesso package risci ad aiutarmi a completare queste visibilità? grazie |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
doppio
__________________
Desktop: Intel i7-4770K | Asus Gryphon Z87 | Crucial 16GB DDR3 1600MHz | Gigabyte GTX 780 OC Windforce x3 | Samsung 840 Pro 128GB (x 2 RAID0) | be quiet! Straight Power E9 680W CM Mercatino: bottoni, Dede371, pippokennedy, Bulbi_67, randose, DarkSiDE, davidepaco, _Legend_ Ultima modifica di Gremo : 14-06-2005 alle 12:42. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
va bene, allora contestatemi questo:
Codice:
class Outer {
protected class Inner1 {
Inner2 i2 = new Inner2();
}
private class Inner2 {
}
public Inner1 getInner1() {return new Inner1();}
}
//---------------------------------------------------------
class test {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner1 i = o.getInner1();
}
}
-una sottoclasse della classe che contiene Inner1 (Outer); -una classe che appartiene allo stesso package come fa ad accedervi? se si dichiara Inner1 private, allora il main dà un errore |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 4203
|
Quote:
ma scusa un attimo, se tu hai due variabili private in una classe tra di loro si vedono quindi anche le inner class private, mentre non le puoi vedere fuori dalla classe |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
la mia domanda cmq era un'altra. quando Inner1 è protected, perchè da test riesco ad istanziarla?(se private, ovviamnete nn va) |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2005
Città: Roma
Messaggi: 35
|
Semplice,
tu hai tralasciato un fatto importante... Se vedi le varie definizioni di "protected" noterai che questo modificatore stabilisce l'accessibilità del campo modificato SOLO a livello di package... E se non specifichi nessun package nel tuo codice...java inserisce le tue classi nel package di default...quindi in questo caso TEST e OUTER sono nello stesso package! (anche se questo non è il modo migliore di affrontare i problemi in java...con un po' di fatica ne vieni fuori... |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
cosa vuoi dire con (anche se questo non è il modo migliore di affrontare i problemi in java...con un po' di fatica ne vieni fuori... |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
colgo l'occasione per chiederti un'altra cosa, ringraziandoti della disponibilità
prendiamo 2 modi diversi per propagare le eccezioni, di cui il mio prof. AFFERMA CHE POSSONO CAUSARE PROBLEMI: Codice:
METODO 1: cattura e generazione di una nuova eccezione:
class metodo1 {
public void faiQualcosa() throws AltraEccezione {
try {
generaEccezione(); //metodo che genera un tipo "PrimaEccezione"
}
catch (PrimaEccezione e) { //cattura
throw new AltraEccezione();
}
}
}
PROBLEMA DEL METODO 1: VENGONO PERSE LE INFORMAZIONI SU PrimaEccezione
//--------------------------------------------------------------------
METODO 2: cattura e rigenerazione
class metodo2 {
public void faiQualcosa() throws PrimaEccezione {
try {
generaEccezione(); //metodo che genera un tipo "PrimaEccezione"
}
catch (PrimaEccezione e) { //cattura
throw e; //rigenerata
}
}
}
grazie |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Apr 2005
Città: Roma
Messaggi: 35
|
Quote:
Io ti consiglio di usare molto internet...esistono un infinità di guide e tutorial (molti non sono fatti bene, ma altre invece sono proprio un vademecum) e poi ti tener sempre alla portata un libro di testo che a volte ti tira dentro i problemi proprio con degli appositi esercizi che conviene risolvere si utilizzando il codice...ma se ti è possibile...utilizzando un debugger passo passo che ti illustra i vari movimenti degli oggetti java in memoria! Ti consiglio come tool di sviluppo Eclipse: www.eclipse.org E' grosso, tutto open-source, e di sfruttarne le capacità di debugger per capire quello che avviene dietro le quinte... (ovvio che non puoi utilizzare strumenti quali BlueJ o JCreator rapidi ma meno forniti di tools che in molti casi ti aiutano a capire veramente tanto in maniera veloce...) A volte è anche preferibile utilizzare strutture standard per la programmazione tipo i pattern ma questo è un settore che viene affrontato dopo aver studiato le basi... Ciao, it_developer PS: Dimmi se ho indovinato, fai ing.informatica all'uni, vero??? Codice:
// utilizzando i costruttori a volte potresti trovati meglio... |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
riesci a darmi un consiglio sulle eccezioni?il codice è sopra, forse nn lo hai visto... non faccio ingegneria, poi perchè ti è venuto in mente ingengeria? faccio una laurea "Tecnologie Web e Multimediali" in pratica l'80% di informatica con esami che trattano di programmazione lato server, multimedia e siti statici |
|
|
|
|
|
|
#14 | ||
|
Member
Iscritto dal: Apr 2005
Città: Roma
Messaggi: 35
|
Quote:
Quote:
Allora venendo al codice...si non l'avevo visto...dunque il fattore eccezioni è sempre un qualcosa dove procedere con cautela...anche se poi nella pratica diventerà tutto più semplice... Per il problema non vorrei dire una stupidaggine...perchè non ho ancora provato il codice...ma in prima analisi cosi perderesti il fatto che l'origine dell'eccezione è genereEccezione() invece che faiQualcosa()... Ma come ti ripeto non ho ancora provato nulla è potrebbe essere tutto sbagliato... perchè in linea di massima sull'eccezioni ci sono varie linee di pensiero...chi appunto le rigenerà e chi invece le cattura e ne lancia di nuove! Ciao, it_developer PS: guarda il mex pv... |
||
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
Metodo alternativo: Codice:
METODO 3: rigenera mantenendo la causa
class metodo1 {
public void faiQualcosa() throws AltraEccezione {
try {
generaEccezione(); //metodo che genera un tipo "PrimaEccezione"
}
catch (PrimaEccezione e) { //cattura
throw new AltraEccezione(e);
}
}
Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Dicendo che anche a Cosenza si usa JAVA in quasi tutti i corsi di "programmazione"(anche per quel che riguarda i Sistemi Operativi), il "metodo 3" credo che sia il migliore, ovvere gestione ottimale e non c'è perdita di informazioni sull'eccezione originale.
cmq, magari passo per il solito sapientino che vuole farsi vedere, nella classe Exception, c'è un metodo simpaticissimo, che io consiglio vivamente, anzi io uso solo quello: {....} catch(TipoException te){ te.printStackTrace(); } e non fà altro che stampare lo stack dell'eccezione, ed è utilissimo in fase di progettazione per capirte l'eventuale errore.CIAO
__________________
My gaming placement |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Apr 2005
Città: Roma
Messaggi: 35
|
Anche io sono d'accordo sull'utilizzo del metodo 3, più pulito e in parte molto più leggibile...
(forte...anche a cosenza...java sta prendendo piede negli atenei italiani ad una velocità impressionante...complimenti ai prof! Comunque per il printStackTrace() dipende da che applicazione vai a codificare...ad esempio...una applicazione grafica che non usa la console...è preferibile utilizzare un altro metodo per tener traccia dell'eccezione! Vi consiglio log4j...di Apache.org...una mano santa...in molti casi! (logging...in generale...ovvio...) Ciao, it_developer |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Giusto, senza console devi fare tante altre cose.
__________________
My gaming placement |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:38.



















