OOP Zugriff auf eine Objekt innerhalb einer Klasse aus statischen Methoden

NimDroid

Mitglied
Hallo,

ich möchte folgende Konstellation realisieren. So funktioniert das natürlich nicht:

Java:
public class Velleman_Interface
{
	public static void main(String args[])
	{
		VUSB interface1 = new VUSB (0);
		...
	}

	public static void funktion1()
	{
		interface1.methodeX();
		...
	}

	public static void funktion1()
	{
		interface1.methodeY();
		...
	}

mit dem aktuellen Objektzeiger als Referenz wie folgt geht es auch nicht da ich aus einer statischen Struktur versuche auf eine Objektinstanz zuzugreifen:

Java:
public static void funktion1(VUSB interface1)
	{
		VUSB interface1 = null;
		this.interface1 = interface1;
		interface1.methodeZ();
	}

Wie kann ich es denn bewerkstelligen dass ich auf das Objekt zugreifen kann?
 
Java:
public class Velleman_Interface
{
	private static VUSB interface1;

	public static void main(String args[])
	{
		interface1 = new VUSB (0);
		...
	}

	public static void funktion1()
	{
		interface1.methodeX();
		...
	}

	public static void funktion1()
	{
		interface1.methodeY();
		...
	}

?? Aber ganz ehrlich, das sieht ziemlich komisch aus.
 
Java:
public static void funktion1(VUSB interface1)
    {
        //VUSB interface1 = null; mit der lokalen varialbe überschreibst du dir deinen parameter
        //this.interface1 = interface1; gibt kein this, du bewegst dich in einem statischen context
        interface1.methodeZ(); //einfach aufrufen
    }
 
Java:
public static void funktion1(VUSB interface1)
    {
        //VUSB interface1 = null; mit der lokalen varialbe überschreibst du dir deinen parameter
        //this.interface1 = interface1; gibt kein this, du bewegst dich in einem statischen context
        interface1.methodeZ(); //einfach aufrufen
    }

Ja aber ich möchte die Funktion funktion1() innerhalb einer anderen aufrufen. Sonst müsste ich bei jeder Unterfunktion die auf das Hardware-Interface zugreift ein Objekt instanzieren. z.B.

Java:
public static void aeussere_funktion()
    {
        innere_funktion(interface1);
    }

public static void innere_funktion(VUSB interface1)
    {
        *** Zugriff auf das VUSB Objekt interface 1 *** wie auch immer?
    }
 
Mir fällt gerade auf wenn ich eine Klasse erstelle, die ich aus VUSB ableite und meine inneren Funktionen dort integriere müsste es glaube ich funktionieren? 😳
 
Warum sind funktion1 und funktion2 überhaupt satic?

Java:
public class Velleman_Interface {

   private VUSB interface1;
   
   public Velleman_Interface(VUSB interface1){
      this.interface1 = interface1;
   }
   
   public void funktion1()
   {
       interface1.methodeX();
   }

   public  void funktion2()
   {
       interface1.methodeY();
   }
   
   public static void main(String[] args) {
      Velleman_Interface vellemanInterface = new Velleman_Interface(new VUSB());
      vellemanInterface.funktion1();
      vellemanInterface.funktion2();
      
   }


Mir fällt gerade auf wenn ich eine Klasse erstelle, die ich aus VUSB ableite und meine inneren Funktionen dort integriere müsste es glaube ich funktionieren? 😳
nein Vererbung ist meiner Meinung nach hier der falsche weg....
 
nein Vererbung ist meiner Meinung nach hier der falsche weg....

Was schlägst du vor? Die Unterfunktionen sind sehr nervig lang. Hier ein Beispiel:

Java:
public static boolean String2Port(String SchreibPuffer)
	{
	    VUSB interface1 = new VUSB (0);
	    boolean ErrorFlag = false;
	    ...
	    awaitACCEPT(false);       // ACCEPT = 0 ?
	    // VALID OR Nibble
	    interface1.writeDigital(0x10 | nibbleL);

	    if(!awaitACCEPT(true))     // ACCEPT = 1 ?
	    {
	        // VALID OR Nibble
	       	interface1.writeDigital(0x10 | nibbleH);
	        awaitACCEPT(false);   // ACCEPT = 0 ?
	         interface1.writeDigital(0x00);
	     }
	        else
	        {
	            ...
	            ErrorFlag = true;
	        }
	    }
	    interface1.close();
	    if (ErrorFlag) return true;
	    else return false;
	}

Diese Funktion führt eine Prüfung durch und liefert einen boolschen Wert. Ich nutze sie diverse Male. Jedes Mal darin das Interface zu instanzieren finde ich übertrieben und den ganzen Text jedes Mal einzufügen stilistisch nicht gerade sehr kreativ
 
du benutzt irgendwo ein Objekt mit der Methode String2Port das intern ein VUSB Objekt benutzt, ich versteh nicht warum du da überhaupt satic methoden hast....
 
du benutzt irgendwo ein Objekt mit der Methode String2Port das intern ein VUSB Objekt benutzt, ich versteh nicht warum du da überhaupt satic methoden hast....

Im Grunde hast du Recht. Ich bin es gewohnt sequentiell zu programmieren. Die objektlose Klasse ist quasi eine Zwitterlösung. Ich probiere es mal so. Ohne dürften keine Probleme mehr auftreten. Danke
 

Zurück
Oben