Das letzte Feld kann für eine Schnittstelle nicht zugewiesen werden

8

Ich habe eine Klasse Produkt und eine Schnittstelle LargeProduct. Produkt implementiert LargeProduct.

LargeProduct hat eine variable Höhe mit Getter- und Setter-Methoden, die in der Product-Klasse implementiert werden müssen.

Die Höhenvariable in LargeProduct ist wie folgt definiert:

%Vor%

Die Getter-Methode funktioniert gut:

%Vor%

Aber die Setter-Methode nicht:

%Vor%

Fehler:

%Vor%

Ich bin mir nicht sicher, welchen Fehler es tatsächlich gibt. Ich benutze Eclipse und wenn ich schwebe gibt es den ersten Fehler, und am unteren Rand des Fensters gibt es den zweiten Fehler.

    
Matt 14.12.2010, 10:37
quelle

5 Antworten

15

Schnittstellen können nur Konstanten enthalten, keine universellen Variablen. Schnittstellen sollten nur Konstanten enthalten, wenn sie für den Rest der Schnittstelle wirklich relevant sind, und sie sollten SHOUTY_CASE wie jede andere Konstante verwenden. Es klingt wie LargeProduct sollte nicht eine Konstante namens height haben - stattdessen sollte Ihre Implementierung das Feld height deklarieren.

Beachten Sie, dass Schnittstellen APIs sind, die die Fähigkeiten von Typen zeigen. Felder sollten nicht Teil der API sein - sie sind ein Detail der Implementierung . Wer sagt denn, dass Sie getHeight und setHeight basierend auf einer einfachen Variablen schreiben? Diese Methoden können eine Datenbank abfragen oder an eine Instanz eines anderen Typs delegieren. Der Verbraucher der Schnittstelle sollte das nicht wissen oder sich darum kümmern.

Weitere Informationen zu Feldern in Schnittstellen finden Sie in Abschnitt 9.3 von die Java-Sprachspezifikation :

  

Jede Felddeklaration im Rumpf einer Schnittstelle ist implizit public, static und final. Es ist zulässig, einen oder alle dieser Modifikatoren für solche Felder redundant anzugeben.

    
Jon Skeet 14.12.2010, 10:39
quelle
2
  

Die Höhe Variable in LargeProduct ist   so definiert:

%Vor%

In Schnittstellen definierte Variablen sind implizit static und final , d. h. Konstanten. Darüber beschwert sich der Compiler.

Sie können keine Instanzvariable in einer Schnittstelle definieren. Lassen Sie es einfach aus - die Methoden get und set stellen sicher, dass die Klassen wie vorgesehen verwendet werden können. Die tatsächliche Variable ist ein Implementierungsdetail für die implementierenden Klassen.

    
Michael Borgwardt 14.12.2010 10:43
quelle
1

Standardmäßig sind die Felder (Elementvariable) in der Schnittstelle public static final

und Sie haben kein Set für final

    
Jigar Joshi 14.12.2010 10:41
quelle
0

Sie können einem Endfeld keinen Wert zuweisen. Höhe im Produkt als

deklarieren %Vor%     
Paul McKenzie 14.12.2010 10:38
quelle
0

Genau org.life.java! Und Sie können eine statische letzte Variable nicht ändern! Weil es die Art ist, eine Konstante in Java zu bestimmen.

    
stecb 14.12.2010 10:43
quelle

Tags und Links