2009-12-18 13 views
5

Gibt es eine Annotation, um zu deklarieren, dass eine bestimmte Methode nicht in den JavaDocs enthalten ist, obwohl sie öffentlich ist?Anmerkung zum Deaktivieren von JavaDocs

Etwas wie:

@nojavadocs 
public void foo(){ 
//... 
} 

P. S. Ich verstehe den Punkt hier über API, aber die Methoden sind einfach "nicht unterstützt". Sie funktionieren (und müssen für den Zugriff aus anderen Paketen öffentlich sein), aber wir möchten sie nicht dokumentieren und Fragen zur Verwendung beantworten, wenn ihre Funktionalität für unterstützte Anwendungsszenarien nicht relevant ist. Ein gutes Design kann bedeuten, sie in eine andere Klasse zu verschieben, aber sie beziehen sich logisch auf die Daten in der Klasse.

Antwort

4

Nicht, wenn Sie Suns JavaDocs-Tool verwenden.

Sie haben a feature request für sie, aber es ist in niedriger Priorität seit 1997

können Sie eine benutzerdefinierte doclet schreiben, dies zu überwinden, oder verwenden Sie ein 3rd-Party-Tool (DocFlex oder so).

+1

Gut zu hören gibt es eine Feature-Anfrage - zumindest bin ich nicht der einzige Dummy, der das verlangt :-) –

4

Ja ... aber nicht auf eine gute Weise (mit Methoden, die öffentlich sind, die nicht wirklich "öffentlich" sind, ist keine große Design-Praxis).

Sie könnten dem in this thread angegebenen Vorschlag folgen und die Methode mit @deprecated markieren. Wenn Sie javadoc ausführen, verwenden Sie die Option -nodeprecated.

Edit: Wie andere bemerkt haben, ist dies nicht ein wünschenswertes Vorgehen. Dies wird Ihr Problem lösen, aber Sie müssen wirklich darüber nachdenken, warum Sie die Methode verbergen möchten - bei einer kompilierten Version Ihres Codes kann jemand Ihre Funktion noch sehen; Das Verstecken in der Dokumentation verdeckt die Methode nicht. Ich möchte hier betonen, dass die Qualifier private, public und protected eine Bedeutung haben, die Sie berücksichtigen und effektiv nutzen sollten. Es gibt keine "versteckte" public Methode.

+0

Dies funktioniert, und ist eine clevere Lösung, aber es ist ein Problem, dass Sie die Annotation Anmerkung missbraucht, so dass Sie Code nicht übereinstimmt, was es bedeutet. Zumindest würde ich die Methoden kommentieren und klar erklären, warum ich etwas so merkwürdiges machte. Werkzeuge (z.B.eclipse) wird eine Warnung für veraltete Methoden kennzeichnen (obwohl Sie diese Warnungen als ignorierend markieren könnten). –

+0

Ich bin nicht für die Verwendung dieser Taktik befürworten - eindeutig gibt es ein größeres Problem hier und die Auswirkungen der Kennzeichnung etwas @deprecated kann äußerst unerwünscht sein, aber es erfüllt die Bedürfnisse des OP. Der Thread, mit dem ich in den Java-Foren verlinkt habe, schlägt genau wie Sie vor, dass die Methode klar kommentiert werden sollte, um Verwirrung zu vermeiden. –

6

Der einzige Grund, warum ich daran denken könnte, dass Sie das tun würden, wäre, die Methode in irgendeiner Hinsicht zu "verstecken", wenn auch nur in Bezug auf die Dokumentation. Wenn Sie das tun würden, würden Sie die Dokumentation so gestalten, dass sie "kaputt" ist in dem Sinne, dass die Dokumentation kaputt geht, wenn sie veraltet ist und nicht mehr genau wiedergibt, was die Klasse tut. Da die Methode immer noch Teil der öffentlichen API ist, verstecken Sie sie nicht wirklich.

Wenn Sie möchten, dass eine Methode außerhalb der Klasse oder einiger Benutzer nicht verwendet wird, aktivieren Sie sie als privat oder als Paket. Wenn das unpraktisch ist und öffentlich sein muss, würde ich nur sehr deutlich die Einschränkungen seiner Verwendung dokumentieren, möglicherweise mit einer Namenskonvention (zum Beispiel, Python tut das, es gibt Entitätsnamen, die von Unterstrichen umgeben sind, die Sie sehen können, aber sind soll mehr Teil der Klassenimplementierung als die öffentliche API sein)

2
/** 
* Don't use this method <br> 
* <i>or all your data will be lost.</i> 
*/ 
public void foo(){ 
    //... 
} 

gut, verwenden Sie eine bessere Erklärung, warum der Benutzer diese Methode nicht verwenden sollte ...
Denken Sie daran, dass es nicht schwer ist, jede (öffentlich) Verfahren unter Verwendung eines Decompiler oder Reflexion zu finden.