Bir alan veya yöntemin public
ve final
hem olmasını hem de alan veya yöntem yoksa bir derleme zamanı hatası oluşturmasını sağlayan özel bir açıklama oluşturmaya çalışıyorum hem public
ve bu örneklerde olduğu gibi final
:Bir Açıklama Hatası
// Compiles
@PublicFinal
public final int var = 2;
// Compiles
@PublicFinal
public final void myMethod {}
// Compile time error
@PublicFinal
private final int fail = 2;
Şimdiye kadar, yaptığım özel açıklama arayüzünde hem:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.METHOD, ElementType.FIELD})
public @interface PublicFinal { }
ve
Processor
:
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import java.util.Set;
@SupportedAnnotationTypes("PublicFinal")
public class PubicFinalProcessor extends AbstractProcessor
{
@Override
public boolean process(
Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv)
{
for (TypeElement typeElement : annotations)
{
Set<Modifier> modifiers = typeElement.getModifiers();
if (!modifiers.contains(Modifier.FINAL)
|| !modifiers.contains(Modifier.PUBLIC))
{
// Compile time error.
// TODO How do I raise an error?
}
}
// All PublicFinal annotations are handled by this Processor.
return true;
}
}
TODO
tarafından ima edildiği gibi, derleme zamanı hatası nasıl üretileceğini bilmiyorum. İşlemci documentation bir işlemci, takım diğer aktif açıklama işlemcileri durdurabilir yakalanmamış istisna atar bir istisna,
atma edilmemelidir açıkça ortaya koyuyor.
Bir hata durumu gündeme ne olacağını açıklamak için devam ediyor, ama bir hata durumunu nasıl artırılabileceğini şimdi .
Soru: Bir derleme zamanı hatası oluşturacak şekilde nasıl bir hata durumu oluşturabilirim?