gpt4 book ai didi

Java:允许带有自定义注释的对象的集合

转载 作者:行者123 更新时间:2023-12-01 07:41:48 25 4
gpt4 key购买 nike

我想用 @MyEntity 注释来注释一些类

public @interface MyEntity {}

@MyEntity
public class MyClass { ... }

并定义一个集合,其中仅允许具有该注释的类(无需将它们定义为 public class MyClass Implements XXX):

List<MyEntity> list = new ArrayList<MyEntity>();
list.add(new MyClass())

上述代码会导致编译错误“ArrayList 类型中的方法 add(MyEntity) 不适用于参数 (MyClass)”。有没有办法定义一个集合,只允许具有给定注释的对象?

最佳答案

简短的回答是否定的。

你的问题是List<MyEntity>定义 MyEntity 或其子类的列表(即,如果我们有 @interface AnotherEntity extends MyEntity 那么我们可以将 AnotherEntity 放入此列表)。

MyClass不扩展/实现MyEntity ,用它进行注释。

即使有可能,效率也不会很高。您不知道哪些方法或字段可用,MyEntity不描述您的对象的接口(interface)。因此,它唯一的用途就是过滤错误的插入。您可以轻松地实现它,提供您的 List 实现:

List<?> myEntities = new LinkedList<?> {
@Override
public boolean add(Object obj) {
if (obj != null && obj.getClass().isAnnotationPresent(MyEntity.class)) {
return super.add(obj);
}
throw new IllegalArgumentException("Only objects annotated with MyEntity are allowed");
}

@Override
public boolean addAll(Collection<?> objs) {
//something similar, maybe with Collections2.filter from Google Collections
}
};

关于Java:允许带有自定义注释的对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3953963/

25 4 0
文章推荐: java - 避免 NullPointerException
文章推荐: jquery - 单击按钮应使用 ag-grid 中的 cellRenderer 在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com