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

一个元素上有多个相同类型的注释?

安奇
2023-03-14
问题内容

我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码:

public class Dupe {
    public @interface Foo {
      String bar();
    }

    @Foo(bar="one")
    @Foo(bar="two")
    public void haha() {}
}

编译以上内容时,javac抱怨重复的注释:

max @ upsight:〜/ work / daybreak $ javac Dupe.java 
Dupe.java:5:重复注释

这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗?

如果上述方法不可行,有哪些可能的解决方法?

更新:我被要求描述我的用例。开始。

我正在建立一种语法糖化机制,以“映射”
POJO到文档存储(例如MongoDB)。我想允许将索引指定为getter或setter上的注释。这是一个人为的例子:

public class Employee {
    private List<Project> projects;

    @Index(expr = "project.client_id")
    @Index(expr = "project.start_date")
    public List<Project> getProjects() { return projects; }
}

显然,我希望能够通过Project的各种属性快速找到Employee的实例。我可以使用不同的expr()值指定两次@Index,或者采用接受的答案中指定的方法。即使Hibernate这样做并且不被认为是hack,我认为至少允许在单个元素上具有相同类型的多个注释仍然有意义。


问题答案:

不允许两个或多个相同类型的注释。但是,您可以执行以下操作:

public @interface Foos {
    Foo[] value();
}

@Foos({@Foo(bar="one"), @Foo(bar="two")})
public void haha() {}

但是,您将需要对代码中的Foos批注进行专门处理。

顺便说一句,我刚刚在2小时前使用过此方法来解决同一问题:)



 类似资料:
  • 我在Wordpress和Visual Composer一起工作,我有一个切换容器。基本上,我点击每个选项卡,下面的内容就会发生变化。我想通过CSS为每个选项卡分配一个不同的图像作为背景。但是,我已经实现了这一点,因为每个选项卡都有相同的类名(由visual composer赋予它),所以图像是相同的。我需要弄清楚如何给每个选项卡一个唯一的id,这样我就可以给每个选项卡一个自己的背景图像--但是由于

  • 我可以重写,以便它将其数据存储在map中,但这意味着每个方法还需要传递另一个参数。变成,变成,看起来太难看了。操作还需要传递。 据我所知,另一种方法是创建一个存储库,它将管理的数据,并调用操作来重新初始化它。 这种方法的问题是,如果我们有两个(A和B),并且活动容器是A,因此包含在A中呈现的项,容器B仍然会监听的更改。如果检查是方法中的活动容器,我可以添加检查,但我不确定应该这样做。

  • 我有4个与“HOD”同名的文本,我想点击第一个“HOD”。 我已经尝试了所有这些:1//a[contains(text(),'HOD')][1]2//a[@class=“link_job ng binding”][1]

  • 目前我正在做一项与多边形相关的工作。多边形可以描述为几个顶点。 现在,我有一些多边形已经矢量 一种方法可以告诉我,一个点在哪个多边形内 我需要设置返回的多边形的颜色。 我的第一个问题是如何知道返回的多边形是否在向量内 我的第一个想法是使用无序的集合和比较(vertex.begin(),vertex)。end())。我不知道是否有更好的主意。 另一个问题是某些多边形可能包含相同的边。如何设计数据结构

  • 问题内容: 在一页中为多个元素提供相同的ID是否安全?例如,当使用某些jquery插件,两次或多次运行某些滑块或图库时,通常会发生这种情况。我们知道,开发人员喜欢给html容器一些ID,以使脚本工作更快。 让我们阅读w3.org文档: 使ID类型的属性特别的原因是,没有两个这样的属性可以具有相同的值。无论使用哪种文档语言,ID属性都可以用来唯一标识其元素。 但是下一个示例具有2个具有相同ID的元素

  • 我有一个gradle android项目,有两个模块: 穿 在我的gradle配置中,我有不同的构建类型。默认设置(debug和release,每个都有自定义设置)以及dev和beta构建类型(也有自定义签名、自定义proguard和自定义applicationIdSuffix)。 我现在想做的是使用构建类型测试版(gradle清洁组件测试版)构建应用程序包。这就开始在测试版中构建应用程序,看到它