Kommentar (Java)
I forbindelse med Java- programmeringsspråket er kommentar et språkelement som gjør at metadata kan inkorporeres i kildeteksten . Dette elementet ble definert i JSR 175 og introdusert med versjon Java 5.0.
Kommentarer begynner med et @ -tegn. Dette blir etterfulgt av navnet hennes. Eventuelt kan en kommadelt parameterliste, som er lukket i runde parenteser, følge. For eksempel markerer merknaden i følgende kildekodeutdrag klasse A som utdatert :
@Deprecated
public class A {}
En kommentarprosessor er en kompilator-plugin-modul som kan evaluere merknader under kompilering for å undertrykke eller utløse advarsler og feilmeldinger eller generere ekstra kildekode eller andre filer. Han kan imidlertid ikke endre kommentert kode. Kommentarer som dette er ment for kan også evalueres i løpetid ved hjelp av refleksjon .
Merknader brukes blant annet i Jakarta EE- miljøet for å legge til informasjon til klasser som måtte lagres i separate filer før Java 5. Fremtredende eksempler er hjemlige og lokale grensesnitt samt distribusjonsbeskrivere.
En tidligere teknikk for å bygge inn metadata i Java-kildekoden er bruken av spesielle Javadoc- kommentarer. Disse ble evaluert ved hjelp av såkalte doclets . Et mye brukt verktøy for denne metoden er XDoclet . Denne teknikken kan fortsatt brukes etter introduksjonen av kommentarene.
Forhåndsdefinerte merknader
I Java SE 5.0 er syv forhåndsdefinerte merketyper tilgjengelige, i pakkene ( pakken ) java.lang
eller java.lang.annotation
løgnen. I motsetning til de fleste kommentarene blir de alle evaluert av kompilatoren. Programmører kan lage mer.
Kommentar | beskrivelse |
---|---|
java.lang Det er merknader i pakken .
| |
@Foreldet | Dette kan brukes til å merke klasser, attributter eller metoder som ikke lenger skal brukes. Kompilatoren sender deretter en advarsel hvis et element som er merket på denne måten blir brukt.
Det anbefales også å legge til en Javadoc- kommentar som viser hvordan det tilsvarende elementet skal byttes ut. Følgende eksempel viser dette: /**
* @deprecated Die Klasse A wurde mit Version 10.3 durch die Klasse ANeu ersetzt.
*/
@Deprecated
public class A {}
|
@Overstyring | Denne typen kan brukes til å identifisere en metode som overskriver metoden til superklassen. Kompilatoren sørger da for at superklassen inneholder denne metoden og returnerer en feil hvis den ikke gjør det.
Eksempel: public class A {
public void eineMethode() {}
}
public class B extends A {
@Override
public void eineMethode() {}
}
|
@SuppressWarnings | Når du bruker denne typen merknader, undertrykker kompilatoren visse advarsler. En matrise med strenger som inneholder advarslene som skal undertrykkes, overføres til kommentaren.
Det følgende eksempel instruerer kompilatoren å undertrykke den avviklede advarsel for ADeprecatedClass klasse: public class A {
@SuppressWarnings({"deprecation"})
public void eineMethode() {
EineDeprecatedKlasse b = new EineDeprecatedKlasse();
}
}
|
@SafeVarargs | Denne merknaden sikrer at Varargs-parametrene med generiske stoffer ikke erstattes med en uegnet generisk type ved kjøretid. Ingen advarsel vises da når metoden eller konstruktøren kalles. Merknaden ble introdusert med Java 7. Opp til Java 6 kan du dokumentere tilliten til den ringte koden når du ringer med en @ SuppressWarnings-kommentar, fra Java 7 kan metoden erklære seg selv som pålitelig. |
I pakken java.lang.annotation - disse brukes bare til å definere merknader.
| |
@Dokumentert | Denne merketypen brukes som metaanmerking: En merknad av denne typen angir for en nylig opprettet merketype at den blir tatt i betraktning av Javadoc når dokumentet genereres. |
@Arvet | Denne typen kommentar brukes når du programmerer en kommentar. Dette kan brukes til å spesifisere at dette arves sammen med en klasse. Hvis denne merknaden brukes for eksempel for en bestemt klasse, gjelder den også for alle klasser som arver fra den. |
@Bevaring | Denne typen brukes når du programmerer en kommentar. Den indikerer når den er tilgjengelig av seg selv. Det er tre mulige verdier for en kommentar av denne typen, som er oppført i oppregningen java.lang.annotation.RetentionPolicy :
|
@Mål | Denne typen kommentar brukes når du programmerer en kommentar. Dette definerer hvilke elementer i et program det kan brukes på. De mulige verdiene for en kommentar av denne typen er oppført i nummereringen java.lang.annotation.ElementType .
|
Definisjon av dine egne kommentarer
Kommentarer er spesielle grensesnitt; I følge konvensjonen er navnene deres skrevet med store bokstaver. I avtalen deres er interface
det tegnet @
. De utvider implisitt grensesnittet java.lang.annotation.Annotation
. De må ikke utvide (dvs. extends
er forbudt) andre grensesnitt og er ikke generiske. Metodene deres er parameterløse og ikke-generiske. Bare resultattyper er tillatt som resultattyper (returtype):
- primitive typer
- Oppregningstyper (
enum
) - Kommentarer
String
Class
- Felter (matriser) fra disse typene
De kaster heller ikke unntak og har ikke lov til å bruke rekursjon.
Mange kommentarer inneholder ingen metoder. Et eksempel kan være:
@interface Vorlaeufig { }
Andre merknader inneholder metoder (som vanlig for grensesnitt), men bare med resultattypene som er oppført ovenfor. I henhold til konvensjonen, hvis en kommentar bare inneholder en metode, er navnet value
:
@interface Test {
boolean value(); // true solange nicht freigegeben
}
eller
@interface Autoren {
String[] value(); // Namen der Autoren
}
eller
@interface Kunden {
Person[] value();
}
der personen enum
må defineres som enumerasjonstype ( ) eller kommentar, f.eks. B.:
@interface Person {
String name();
int alter();
}
Når du blir enige om merknader, java.lang.annotation
brukes ofte standardkommentarene fra pakken . Spesielt bør det @Retention
spesifiseres hvor lenge merknaden skal oppbevares: bare i kildekoden ( SOURCE
), i den lagrede klassefilen ( CLASS
) eller også i den lastede klassen ( RUNTIME
). @Target
beskriver hvilke programelementer kommentaren kan brukes. For eksempel er alle merkeavtaler i pakken java.lang.annotation
med merknadene
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
Feil. Som et resultat blir de alle evaluert av javadoc, lastet i bytekoden og kan dermed evalueres i løpetid; i tillegg kan de bare brukes til merknader.
Bruk av dine egne kommentarer
En kommentar uten metoder, slik som @Vorlaeufig
f.eks. B. plasseres foran en klasse:
@Vorlaeufig
class Klasse {
void methode();
}
En kommentar med bare en metode med navnet value
må gis en konstant verdi av resultattypen for denne metoden i parentes:
@Test(true)
public void methode() { ... }
Hvis resultattypen er en matrise, bør en bokstavelig matrise brukes:
@Autoren({"Solymosi", "Grude"})
String buch = "Algorithmen und Datenstrukturen mit Java"
Hvis matrisen ikke inneholder noen elementer, må den også ({})
spesifiseres. Men hvis matrisen bare inneholder ett element, kan de krøllete bukkene utelates:
@Autoren("Solymosi")
String anderesBuch = "Programmieren in Scala"
En kommentar med flere metoder må tilordnes en konstant verdi i parentes til hver av metodene:
@Person(name = "Andreas Solymosi", alter = 56)
Konto konto = new Konto();
Alternativet for å spesifisere verdien etter navn er også tilgjengelig for merknader med en metode (det er imidlertid overflødig, høyst for lesbarhet):
@Test(value = true)
En kompleks (nestet) kommentar må brukes nestet:
@Kunden(@Person(name = "Andreas Solymosi", alter = 56))
class Unternehmen { … }
Standardverdier kan defineres for metodene i kommentaravtalen; deretter kan den tilsvarende verdien utelates når den brukes. Siden merknader er grensesnitt, kan de merkes med merknader selv:
@Autoren("Solymosi")
public @interface Test {
boolean wert() default false; // muss nicht unbedingt wert heißen
}
Evaluering av merknader
Hvis kommentarene er lastet med klassens bytekode, kan de evalueres ved hjelp av refleksjon. Du kan for eksempel bestemme om en kommentar ble spesifisert eller ikke:
boolean vorlaeufig = Klasse.class.isAnnotationPresent(Vorlaeufig.class);
Når du har bestemt at merknaden er der, kan du også lese verdien, f.eks. B. om metoden fremdeles er i testtilstand eller ikke:
boolean imTestzustand = Klasse.class.getMethod("methode", new Class[]{}).getAnnotation(Test.class).value();
Hvis kommentaren ikke eksisterer, heves getAnnotation()
unntaket NullPointerException
. Elementene må velges individuelt fra en kompleks kommentar:
Person kunden = Unternehmen.class.getAnnotation(Kunden.class).value()[0];
Kommentar av pakker
Med Java Language Specification kan pakker kommenteres, for eksempel for å gi dokumentasjon for en pakke. Maksimalt én package
erklæring kan kommenteres per pakke . Hvis en pakke skal motta kommentarer, anbefaler Java Language Specification at du oppretter en egen fil package-info.java
i katalogen til denne pakken. Denne filen inneholder deretter package
erklæringen med kommentarene.
weblenker
- Kommentarer i Java
- Kommentarer i Suns Java-veiledning
- Annoteringsbehandlingsverktøy (apt )
- J2SE 5.0-kommentarfunksjonen på Sun
- JSR 175: En metadatainnretning for JavaTM programmeringsspråk (engelsk)
- Kommentarer i Java Language Specification (engelsk)
- Kommentarer i "Java er også en øy"