2009-10-24 6 views

Antwort

2

Sie gehen davon aus, dass @deprecated nur in der Kompilierphase (IDE, Compiler) von Interesse ist, aber es ist keine Einschränkung für Imaging-Instrumentierungsszenarien, für die Sie diese Informationen benötigen.

Zum Beispiel kann eine IDE Sie über die Anzahl der Call-Sites für eine veraltete Methode informieren, aber wie würden Sie den Prozentsatz der Zeit bestimmen, die Ihre Anwendung in veralteten Methoden verbringt?

+2

RetentionPolicy.Class wäre auch dafür ausreichend. – Jorn

1

Stellen Sie sich vor, Sie kompilieren MyClass.class mit veralteten Methoden. Wenn Ihre @Deprecated-Annotationen verloren gegangen sind, kann Ihre IDE oder Ihr Compiler Sie nicht warnen, wenn Sie diese Methoden von einer anderen Klasse aufrufen.

+4

RetentionPolicy.Class wäre dafür ausreichend. – meriton

+0

Mmm, das stimmt ... – sinuhepop

1

Die eigene Laufzeit ist eine andere Designzeit, z. wenn Code geschrieben wird, der eine API verwendet.

+0

Ähm ... wie meinst du das? Wenn ich eine API verwende, greife ich nicht über einen Debugger auf diese API zu. Ich benutze die Klassendateien für diese API, aber das wird von RetentionPolicy.Class abgedeckt. – meriton

+0

Wenn Sie z. B. GUI-Komponenten aus der IDE-Palette verwenden und sie auf Ihrem Formular ablegen, wird der Code ausgeführt. – JRL

1

Gute Frage, und ich strecke mich aus, um ein überzeugendes Szenario zu entwickeln. Alles, was ich habe, ist, dass ich mir eine Anwendung vorstellen könnte, die einen Classloader verwendet, der die Verwendung von veraltetem Code nicht zulässt. Dies würde erfordern RetentionPolicy.RUNTIME.

Das ist alles, was ich habe ...

1

Paar praktische Anwendungen in den Sinn kommen:

Mit Velocity Sie eine benutzerdefinierte Uberspector haben kann, die die tatsächlichen Anrufe von Velocity-Vorlagen auf jede veraltete Methode protokolliert und Dann können Sie durch Lesen des Protokolls sehen, wo die Methode verwendet wird und Sie können sie bearbeiten.

Mit Wicket Sie eine Sicherheitsrichtlinie haben kann, die jede Klasse auf den .class Inhalte basierend verweigert das Instanziieren so könnte es möglich sein, ein System zu machen, die die Instanziierung @Deprecated Klassen verhindert, wenn Sie kein Administrator.

+0

in Bezug auf beide Punkte, wäre es immer noch möglich, sie zur Kompilierzeit zu überprüfen. Dependency Checker sollte den Trick machen, Nein sicher, wenn ich verstehe, was Sie oben gesagt haben – Ravisha

4

Es gibt einige Frameworks und Tools, mit denen Objekte instanziiert werden, um mit ihnen zu arbeiten.

Zum Beispiel erstellen viele JavaBean-UI-Editoren Instanzen der Beans und interagieren mit ihnen, wenn der Benutzer die Benutzeroberfläche, die er entwirft, manipuliert.

Wenn die Annotation @Deprecated zur Laufzeit verfügbar ist, können Tools wie diese veraltete Methoden, Ereignisse und Eigenschaften für den Benutzer kennzeichnen.

Verwandte Themen