Was ist der Standard für die Benennung von Schnittstellen in Java API?

7

Ich werde von einem Kollegen nach der Klasse Throwable in der Java-API gefragt.

Im Standard verstehe ich, dass jedes Wort, das mit * abable abschließt, eine Schnittstelle in der Java-API ist. Es gibt einen Industriestandard für die Verwendung solcher Wörter als Interface-Namen. Also erzählte ich ihm unwissentlich davon als Basisschnittstelle für alle Ausnahmesituationen und Fehlertypen in Java. Dann zeigt er mir die Java-Datei für diese Klasse.

Meine Fragen:

  1. Warum Java-Leute diesen Namen gewählt haben, um eine Klasse zu sein. Ich denke, das sollte standardmäßig eine Schnittstelle sein?

  2. Ist dies ein Muster, um * fähige Wörter als Schnittstelle zu verwenden?

  3. Gibt es ein anderes Beispiel für eine Klasse, die mit * able? endet?

Grüße.

    
vijay.shad 15.10.2010, 04:13
quelle

5 Antworten

20

Es ist sehr üblich, dass diese "fähigen" Namen Schnittstellen in Java sind, aber es gibt keine offizielle Konvention für die Benennung von Schnittstellen, die darauf hinweist, dass "-fähige" Namen Schnittstellennamen sein sollten, obwohl das normalerweise der Fall ist der Fall.

Offizielle Java-Namenskonventionen finden Sie hier - es ist ziemlich schlank, es gibt wirklich keine Einschränkungen für die Klassen- oder Schnittstellenbenennung:

Was Ihre Throwable -Frage betrifft, hat James Gosling einmal geantwortet, warum es eine Klasse und keine Schnittstelle ist, obwohl der Name für eine Schnittstelle passender ist.

Leider ist der Originalartikel von Sun / Oracles Website in den Internet-Äther verschwunden, so dass ich nur indirekte Zuschreibung anbieten kann:

edit: Da ich weiterhin auf diese Frage upvotes bekomme, fand ich den Link zur Sun-Diskussion über die Wayback Machine , hier: Ссылка

  

JDC: Warum ist Throwable keine Schnittstelle? Der Name deutet darauf hin, dass es hätte sein sollen. In der Lage zu sein, nach Typen zu suchen, also nach etwas wie try {} catch () anstatt nur nach Klassen. Das würde die Programmiersprache Java viel flexibler machen.

     

JG: Der Grund, warum Throwable und der Rest dieser Leute keine Interfaces sind, liegt daran, dass wir uns entschieden haben, oder ich habe mich ziemlich früh entschieden. Ich habe entschieden, dass ich jede Ausnahme, die ausgelöst wird, mit einem Status verknüpfen möchte. Und das kann man nicht mit Schnittstellen machen; Das können Sie nur mit Klassen tun. Der Zustand, der da ist, ist im Grunde Standard. Es gibt eine Nachricht, es gibt einen Schnappschuss, solche Sachen, die immer da sind. Wenn Sie Throwable zu einer Schnittstelle machen, ist es die Versuchung, sie zuzuweisen, um jedes alte Objekt zu einer Throwable-Sache zu machen. Es fühlt sich stilistisch an, dass das Werfen allgemeiner Objekte wahrscheinlich eine schlechte Idee ist, dass die Dinge, die man werfen will, wirklich Dinge sein sollten, die Ausnahmen sein sollen, die wirklich die Natur der Ausnahme erfassen und was passiert ist. Sie sind nicht nur allgemeine Datenstrukturen.

    
wkl 15.10.2010, 04:35
quelle
29

Nomen werden immer verwendet, um Klassen zu benennen, aber Throwable ist eine Ausnahme.

(Sehen Sie, was ich dort gemacht habe?)

    
Daniel Alexiuc 15.10.2010 04:31
quelle
2

Es gibt andere wie

Und natürlich gibt es viele Schnittstellen, die nicht enden - fähig . Manche Leute bevorzugen alle ihre Schnittstellennamen mit einem 'I' ( IAdjustable anstelle von Adjustable ). Wie Code-Formatierung Kriege, ist ihre nicht universelle Vereinbarung. Sun hat einige Vorschläge , aber sie sind ziemlich vage.

    
Brad Mace 15.10.2010 04:33
quelle
2
  1. Interface-Namen sollten immer ein Adjektiv sein und wenn möglich sollte in "inable" enden, war der Trend in Namenskonventionen innerhalb der Java-Community. Dies muss nicht strikt befolgt werden, es ist nur eine Namenskonvention, es gibt nichts, was Sie davon abhält, die Schnittstelle / Klasse zu benennen, was immer Sie wollen.

  2. Ja, siehe Ссылка

  3. klonbar

* Anmerkung: Interface-Namen sollten generell Adjektive sein, während Klassennamen generell Substantive sein sollten.

Lesen Sie auf Seite 15 dieses von Sun veröffentlichten Styleguide-Dokuments. Ссылка

Es gibt auch eine Debatte darüber, ob es ein guter Stil ist, den Buchstaben I zu Schnittstellen hinzuzufügen. (Beispiel: ICat, IDog, etc.), aber das gilt generell für andere Sprachen und nicht für Java.

Nach meiner persönlichen Meinung ist eine Konvention nur eine "Faustregel". Wenn die Konvention der Lesbarkeit Ihres Codes im Wege steht, verwenden Sie einen aussagekräftigeren Interface- / Klassennamen als den, der der Konvention folgt, aber Wenn Sie wirklich Schwierigkeiten haben, einen guten beschreibenden Klassennamen zu finden, müssen Sie vielleicht noch ein wenig über die Funktionalität Ihrer Klasse / Schnittstelle nachdenken.

    
Ben Holland 15.10.2010 04:44
quelle
0

Wir sprechen hier von Namenskonventionen , und ja, * abil ist die bevorzugte Konvention für die Benennung von Schnittstellen. Wie Sie sicher schon gesehen haben, gibt es immer Ausnahmen. Zum Beispiel, System.arraycopy ist nicht camel cased.

    
Kirk Woll 15.10.2010 04:31
quelle

Tags und Links