我想知道是否可以创建一个强制执行特定返回类型的Java注释?

问题描述:

我想知道是否可以创建执行特定返回类型的Annotation我想知道是否可以创建一个强制执行特定返回类型的Java注释?

我想是创建一个Annotation,并用它喜欢的方式:

@MarkerAnnotationForcingStringReturnType 
public String someWebflowMethod(...){ 
    ... 
    return "someString"; 
} 

然后我可以有我想要的任何方法名称,但它必须返回,一个String,例如。

+0

我可以看到你要求的唯一目的是禁止字符串的子类(在这种情况下是不可能的,因为字符串是最终的,唯一可以返回的是字符串或null)嗯,如果你试图消除Null作为一个可能的返回值,这实际上是非常有效的 - 我相信@nonull或类似的东西将在Java 7(?) – 2010-08-17 17:18:03

+0

中可用我认为有关返回_type_你不需要注释返回类型已经是String。然而,如果你想确保字符串有一个特殊的格式和/或不是null,你可以创建一个Annotation,但是你需要围绕它来构建一个框架,因为这通常是一个运行时间的事情。 – 2010-08-17 17:33:34

注解本身就是元数据 - 也就是说,“注释”附加到代码位并包含在字节码本身(可能)中。

你可以使用apt编写一个处理器,如果你真的想在编译时验证它。

但是我发现声明一个方法返回String就像一个典型的Java开发人员一样强大和容易理解。你真的有这个理由吗?如果您担心有人可能会更改退货类型,他们可能会轻松删除您的注释。如果您想阻止某人进行这些更改,则可以认为更多比他们可能为“多余”而删除的注释有效(嘿,我们正在讨论您期望在此处使基本要求无效的开发人员通过无能/缺乏意识......)。

方法签名本身不执行特定的返回类型吗?

您可以创建自己的注释,然后编写自己的annotation processor,这可以强制执行它。

我不知道一个内置的...坦率地说,我不知道我看到了这一点。如果你要保持足够的警惕来编写注释,为什么你不够警惕,不能使方法返回类型?在什么情况下你会得到注解的权利,但方法错了?