Java-Sichtbarkeit (gelöst)

A

AquaBall

Fortgeschrittenes Mitglied
2
Ich steh gerade am Schlauch.
Verzeiht die dumme Frage, aber ich blicks gerade echt nicht (heute Nacht nicht geschlafen).
Code:
class test{
  int testVariable;
  void main() {
    // alles Mögliche
  }
  void func1(){
  }
  void func2(){
  }
}

class drausen {
  int eineVariable;
  void method() {       
    eineVariable = testVariable;  // <- hier hackts
    func() //1 oder 2
  } 
}
Schaff ich es echt nicht diese beiden Variablen zusammen zu bringen?
testVariable ist "drausen" nicht sichtbar,
und class drausen darf ich nicht drinnen definieren, weil ich die Klasse brauche.
Ist mir fast peinlich zu fragen, ob das irgendwie geht.


Bitte keine Tips wie Parameterübergabe, weil um was wesentlich komplexeres geht (Interface als functionsÜbergabe.)
Oder anders gefragt: (mein eigentliches Problem) Könnt ihr mit helfen, wie ich Func1 / Func2 an "drausen" übergeben kann?
(Ich will in einem ListArray unterschiedliche Funktionen verknüpfen.)
 
Ohne das du die Klasse instanzierst, geht schon mal gar nichts
 
Da ich gerade an einem Rechner ohne Eclipse sitze nur die light Version:

-------
Funktionsübergabe/Closures light für Java (da nicht vorhanden) per Interfaces:

Code:
public interface IFunction {
   void doSomething();

}

public class Foo {
   private ArrayList<IFunction> list; // instantiate in constructor   

   public void addFunction(IFunction param) {
      list.add(param);
   }

   public void doSomethingComplicated() {
      for (IFunction func : list) {
         func.doSomething();
      }
   }

}


public class FunctionGenerator {
   private Foo foo; // instantiate

   public void generateSomeFunctions() {
      IFunction func1 = new IFunction() {
         @Override
         public void doSomething() {
            // some calculation
         }
      }
      foo.addFunction(func1);

      IFunction func2 = new IFunction() {
         @Override
         public void doSomething() {
            // some other calculation
         }
      }
      foo.addFunction(func2);
   }

}

Prinzip klar? Du übergibst als deine Funktion immer ein Interface mit genau dieser Funktion die dann jeweils anders implementiert wird. Wenn noch Fragen sind einfach fragen.
 
  • Danke
Reaktionen: AquaBall
deek schrieb:
Funktionsübergabe/Closures light für Java (da nicht vorhanden) per Interfaces:

Code:
public interface IFunction {
   void doSomething();
}
Prinzip klar? Du übergibst als deine Funktion immer ein Interface
Danke! Die Idee hab ich mehrfach gelesen, aber hab's nicht hingekriegt.
Doch mit deiner Kurzanleitung ist mir jetzt perfekt gelungen.

Kurz, kompakt, vollständig.
So solls sein!
Danke sehr.
 
Super, freut mich wenn ich helfen konnte.
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.542
Data2006
D
L
Antworten
4
Aufrufe
1.336
lonnie9020
L
M
  • maksimilian
Antworten
4
Aufrufe
990
maksimilian
M
Zurück
Oben Unten