2011-10-18 23 views

cevap

4

sanırım ben çözüm buldu. Düşündüğüm gibi, mevcut javac ile mümkün değil. Yerel ek açıklamalar yalnızca basit yorumlardır ve takılabilir ek açıklama işleme api'si tarafından işlenmez. AMA, JSR308'da, tür değişkenleri, lokal değişkenler, açıklamalı tip-kontrol ve döküm gibi parametreler olarak harika şeyleri destekleyen taşıma tipi ek açıklamaları var ... ve göründüğü gibi, openJDK 8. nice

Bu cevap için
+0

JSR 308, ek açıklama işlemini doğrudan desteklemez (ancak, yerel değişken ek açıklamalarının sınıf dosyasında saklanmadığı uzun süredir devam eden bir hatayı düzeltir). Bahsettiğiniz diğer özelliklere sahip ve bu Java 8'in bir parçasıdır. [Checker Framework] (http://checkerframework.org), JSR 308 üzerine kurulmuştur ve yöntem gövdeleri içinde ek açıklamaları işleyen uygun ziyaretçiler sağlar. – mernst

1

JSR269, ilgili arayüz tür ek açıklamaları erişmek için getAnnotation(Class<A> annotationType) devralır javax.lang.model.element.VariableElement, şöyle olacaktır:

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

teşekkürler. Fakat 'yöntemler', bir dizi eleman anlamındadır, zaten açıklamalı alanları içermelidir (bu yöntem için bu yöntemi kötü bir isim yapar). "fieldsIn" bir yöntemde "alanları (= yerel değişkenler) döndürmez", ancak belirli bir öğe kümesini filtreleyebilir. Ve bununla ilgili problem, API'nin bana açıklamalı lokal değişkenleri vermesidir ('process'-method' parametresi olarak). Şimdilik, TÜM (sadece açıklamalı değil) sınıflarını işlemek ve yerel-değişken-ek açıklamaları el ile (tam olarak bilmiyorum ama) aramam gerekiyor gibi görünüyor. veya örneğini kullanmanın bir yolu var mı? – wrm

İlgili konular