当前位置: 首页 > 面试题库 >

如何强制Java子类定义注释?

赫连坚
2023-03-14
问题内容

如果一个类定义了一个注释,是否有可能迫使其子类定义相同的注释?

例如,我们有一个简单的类/子类对,它们共享@Author @interface.
我想做的事情,就是迫使每个进一步的子类定义相同的@Author注释,以防止RuntimeException将来出现问题。

TestClass.java:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@interface Author { String name(); }

@Author( name = "foo" )
public abstract class TestClass
{
    public static String getInfo( Class<? extends TestClass> c )
    {
        return c.getAnnotation( Author.class ).name();
    }

    public static void main( String[] args )
    {
        System.out.println( "The test class was written by "
                        + getInfo( TestClass.class ) );
        System.out.println( "The test subclass was written by " 
                        + getInfo( TestSubClass.class ) );
    }
}

TestSubClass.java:

@Author( name = "bar" )
public abstract class TestSubClass extends TestClass {}

我知道我可以在运行时枚举所有批注并检查是否丢失了@Author,但是我真的很想在编译时执行此操作(如果可能)。


问题答案:

您可以在编译时使用JSR
269进行此操作。参见:http : //today.java.net/pub/a/today/2006/06/29/validate-java-ee-
annotations-with-annotation-processors.html#pluggable-annotation-processing-
api



 类似资料:
  • 问题内容: 我有一个定义抽象方法的抽象类A。这意味着,要使一个类变得可实例化,必须实现所有抽象方法。 我希望所有子类都以2个整数作为参数实现一个构造函数。 声明构造函数违反了我的目的,因为我希望在子类中定义构造函数,而我对实现一无所知。而且,我不能将构造函数声明为抽象的。 有没有办法做到这一点 ? 我想要的例子: 可以说我正在定义Matrix类的API。在我的问题中,Matrix无法更改其尺寸。

  • 我在一个使用Selenium和C#的自动化项目中工作。我使用Page Object模式定义每个页面(带有它们的定位器),然后在一个测试类中分别定义测试。我有一个Page类,它是页面的基类,我在其中调用:PageFactory.initElements(webDriver,this); 并定义所有页面的通用方法。然后每个页面从page继承,并使用@findby注释定义相应的元素: 添加了一个新的登录

  • 问题内容: 是否有一个静态分析工具可以在IDE外部运行一致地强制使用@Override注释?CheckStyle具有MissingOverride检查,但仅适用于使用@inheritDoc Javadoc标记的方法。我正在寻找一种可以在连续集成计算机上的新构建配置中运行的工具。 问题答案: 一种方法是使用TeamCity的“检查”运行器。我不确定它是否真的可以在IDE之外运行,因为它是在Intel

  • 问题是我写了简单的注释处理器,它根本不处理类型注释。simple annotations processor的源代码如下所示: 有什么想法如何使用或如何通过SimpleAnnotationsProcessor访问类型注释吗?使用可插入的注释处理API对我来说是不必要的,我认为它会比Java反射有更好的性能。无论如何,我也不知道如何通过Java反射访问类型注释。

  • 问题内容: 我正在使用Spring 3和PropertyPlaceholderConfigurator。 我的属性代码如下所示: 如果我的.properties文件中没有prop1,则spring无法初始化其上下文。 问题是如何定义该属性不是必需的?一些注释,配置? 问题答案: 您可以使用默认值: 如果未定义该属性,spring将注入一个空字符串。语法为。

  • 问题内容: 我想在定义类时注册一个类的实例。理想情况下,以下代码可以解决问题。 不幸的是,此代码生成错误。 发生的事情是在我尝试实例化a的行上,但装饰器尚未返回,因此它不存在。 是否使用元类解决了这个问题? 问题答案: 是的,元类可以做到这一点。元类的方法返回该类,因此只需在返回之前注册该类。 前面的示例在Python 2.x中有效。在Python 3.x中,的定义略有不同(虽然未更改,但未显示-