Newsgroup: it.comp.java
Titolo: include

non vorrei urtare la sensibilità dei teorici, ma chiedo:
è possibile importare del codice java tipo le include che in altri
linguaggi vengono eseguite prima della compilazione ?
spiego l'esigenza che ho per la quale non ho soluzione (tranne che
digitare il codice):
ho diverse classi le quali tutte espongono alcuni metodi identici
si tratta di metodi statici
sin qui nessun problema visto che potrei implementare una interfaccia
ciò che me lo impedisce è il fatto che le variabili statiche di ogni
classe, trattate da identici metodi statici, hanno valori differenti
in altre parole vorrei esporre dei metodi statici identici per tutte
queste classi, ma che lavorino su costanti differenti in base alla
classe
e così fino ad ora mi sto copiando il codice rappresentato dai metodi
statici in tutte queste classi (dove le costanti sono differenti); da
qui l'insana idea di una include.
probabilmente ho un bug nella nozioni di OO
qualcuno sa indicarmi una strada per evitarmi di digitare del codice
statico identico come metodi in enne classi, ma che lavori su costanti
differenti (differenti per ogni classe)
ciao grazie

 classe
Orpo.... fammi capire bene: hai una situazione di questo tipo?
-------------------------- ClasseAlfa.java
public class ClasseAlfa {
   private static int johnny=1;
   private static int stecchino=2;
 
   public static void lavora() {
      //usa la variabile "jonhhy"
   }
 
   public static void spara() {
      //usa la variabile "stecchino"
   }
}
------------------------------------------
-------------------------- ClasseBeta.java
public class ClasseBeta {
   private static int johnny=300;
   private static int stecchino=250;
 
   public static void lavora() {
      //usa la variabile "jonhhy"
   }
 
   public static void spara() {
      //usa la variabile "stecchino"
   }
}
------------------------------------------
...e poi accedi alle funzioni con
   ClasseAlfa.lavora();
   ClasseBeta.spara();
Giusto?
Spero solo che il tuo codice non sia tutto cosě... hai appena ammazzato le
basi della programmazione ad oggetti :P (senza offesa eh)
Sarebbe bastato levare di mezzo tutti gli "static" e creare una classe con
un costruttore adatto:
-------------------------- Factotum.java
public class Factotum {
   private int johnny;
   private int stecchino;
 
   public Factotum(int johnny, int stecchino) {
      this.johnny=johnny;
      this.stecchino=stecchino;
   }
   public void lavora() {
      //usa la variabile "jonhhy"
   }
 
   public void spara() {
      //usa la variabile "stecchino"
   }
}
------------------------------------------
per poi allocare il tutto con delle banalissime "new"
   Factotum alfa=new Factotum(1,2);
   Factotum beta=new Factotum(300,250);
e eseguire le tue chiamate come prima, usanto gli oggetti invece che le
classi:
   alfa.lavora();
   beta.spara();
 
se poi questi oggetti devono essere visibili globalmente (cosa che
sconsiglio al massimo), č allora che puoi usare "static" in una classe a
parte che faccia da "collettore di risorse":
-------------------------- WorkArea.java
public class WorkArea {
   public static Factotum alfa=new Factotum(1,2);
   public static Factotum beta=new Factotum(300,250);
}
------------------------------------------
richiamabili poi con:
   WorkArea.alfa.lavora();
   WorkArea.beta.spara();
 
tutto qui....
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
  ---  
http://xenu.freewinds.cx
(per rispondere personalmente leva IlDitoDalCulo)

 sconsiglio al massimo), è allora che puoi usare "static" in una classe a


 ORRORE!!! ;)
vero
doppio e/orrore: l'interfaccia non può contenere body e non si può
definire abstract un metodo static (lo avevo pensato ma non scritto
nell'esempio)
ho fatto così:
public abstract class Comportamento { //comportamenti
    abstract int getID();
 
    public int trattaID() {
        return getID();
    }
}
public class Classe1 extends Comportamento { //oggetti di lavoro...
    int getID() { //caratteristica dell'oggetto
        return 34;
    }
}
//utilizzo oggetti=alias verifica caratteristiche
public static void main(String[] args) {
        System.out.println("caratteristica ID="+ new
Classe1().trattaID());
}
Comunque, mi sta sul cavolo il fatto che con le interfacce posso solo
descrivere dei comportamente (alias dichiarare metodi) senza poter
importare del codice standard con la loro implementazione.

 un'applicazione più "Java-compliant"...