Standardmäßig sind die Felder (Elementvariable) in der Schnittstelle public static final
und Sie haben kein Set für final
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.
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.
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.
Standardmäßig sind die Felder (Elementvariable) in der Schnittstelle public static final
und Sie haben kein Set für final
Sie können einem Endfeld keinen Wert zuweisen. Höhe im Produkt als
deklarieren %Vor%