2016-06-08 2 views
-3

Ich versuche, ein Objekt innerhalb einer Methode einer Klasse zu instanziieren, so dass es überall in der Klasse verwendet werden kann. Ich komme von einem Python-Hintergrund und es ist ziemlich einfach, Sie können das instanziierte Objekt einfach an eine Instanz seines "Selbst" übergeben, wie unten.Instanziieren Sie das öffentliche Objekt innerhalb der Methode

Wie geht das in Java Ich habe etwas wie unten versucht, aber es mag es nicht.

private void init_camera_settings() { 
    public CameraInterface camera; 
    camera.TakePhoto() 
} 

private void someotherMethod() { 
    camera.TakePhoto() 
} 

Beide Methoden sind in der gleichen Klasse. Der Grund dafür ist, dass ich das Kameraobjekt nur in bestimmten Szenarien instanziieren möchte.

Danke!

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/index.html –

+0

@HarshPoddar eine Membervariable ist nicht eine globale Variable zu erstellen. In Java gibt es keine globale Variable. –

+0

In 'init_camera_settings' wollten Sie die Variable initialisieren, anstatt 'TakePhoto' aufzurufen? –

Antwort

1

Um die Variable class in verschiedenen Methoden zu verwenden, sollten die Variablen Klassenbereich haben. Sie verwenden in der Regel new ein neues Objekt

public MyClass { 

    public CameraInterface camera = new Camera(); 


private void init_camera_settings() { 
    camera.TakePhoto() 
} 

private void someotherMethod() { 
    camera.TakePhoto() 
} 
} 
+0

Ich verstehe, dass die Konvention-verletzenden Methodennamen vom Fragesteller kommen; aber trotzdem ... es wert, darauf hinzuweisen. – GhostCat

+0

Schätzen Sie es, danke! – Sam

0
self.camera = CameraInstance() 

entspricht:

class Foo { 

    private CameraInstance camera; 

    public Foo() { 
     this.camera = new CameraInstance(); 
    } 

    // use "this.camera" in methods. 
} 
3

Sie kein Feld innerhalb einer Methode deklarieren kann. In Java hat ein Typ entweder ein Feld oder nicht. Jede Instanz der gleichen Klasse hat denselben Satz von Feldern.

Aber Sie können das Feld (nicht in einem Verfahren) erklären und entscheiden, um nur einen Wert, um es in einem Verfahren zu vergeben:

// Note: avoid public fields 
public CameraInterface camera; 

private void initCameraSettings() { 
    camera = new Camera(); 
} 

private void someotherMethod() { 
    camera.takePhoto(); 
} 

(Das Feld wird einen Standardwert hat, in diesem Fall null, bis Sie ihm einen anderen Wert zuweisen.)

Als beiseite, würde ich stark raten gegen öffentliche Felder. Ich mache jedes Feld privat und füge Eigenschaften hinzu, um den Zugriff bei Bedarf zu ermöglichen. Dadurch können Sie die Implementierungsdetails später ändern. Die einzige Ausnahme sind Felder von unveränderlichen Typen, im Grunde für Konstanten, aber selbst dort wäre ich vorsichtig.

+0

Man könnte hinzufügen, dass manchmal statische statische Felder benötigt werden. – GhostCat

+0

... in einer Methode nur einen Wert zuweisen - sicher meinst du nicht diese 'private CameraInterface Kamera = neue Kamera();' –

+0

@ScaryWombat: Nein, ich meine, was ich gezeigt habe. Ich habe den Wortlaut ein wenig geklärt. –

Verwandte Themen