【问题标题】:Adding a generic of variable datatype to a set Java将变量数据类型的泛型添加到一组 Java
【发布时间】:2018-04-21 07:26:21
【问题描述】:

这是我想做的一个例子:

Class Example {
    private Set<A> setA = new HashSet<A>();
    private Set<B> setB = new HashSet<B>();


    //setters/getters

    . . .


    // this method is where I don't know what to put
    public boolean addToList(Set<?> set, <?> generic){
          set.add(generic)
    }

    public static void main(String[] args){
         Example ex = new Example();
         ex.addToList(ex.getSetA(), new A());
         ex.addToList(ex.getSetB() new B());
    }
}

我想编写一个方法来执行不同数据类型的集合。我发现这比为十几个集合中的每一个编写添加/获取/删除方法更实用一些。

有没有办法在 Java 中做到这一点?

【问题讨论】:

  • public &lt;T&gt; boolean addToList(Set&lt;T&gt; set, T generic){ 应该可以工作,但也许你可以使用映射(类作为键,你的集合作为值,即 A.class=> setA,B.class=> setB)和 addToList 变为map.get(generic.class).add(generic)
  • 除了ex.getSetA().add(new A())之外,您还需要什么?
  • @Andy Turner 我也可以根据用户的查询添加新的 B。这只是一个简化的例子。我正在处理许多集合,只是想要比重新编写相同的方法来处理每种数据类型更干净的东西
  • 您需要展示一个更具说明性的示例,因为对于您在此处获得的内容,您无需重新编写相同的方法。
  • 我不同意。示例应该是微不足道的但可以归纳的。我可以用 2 个样本集做任何事情,我可以用 100 个样本集做任何事情,但查看较小的样本要简单得多

标签: java generics wildcard insertion


【解决方案1】:

我认为你需要参数化方法

public <T> boolean addToList(Set<T> set, T generic){
      set.add(generic)
}

【讨论】:

  • 我能否要求对此方法声明进行更多说明?特别是“public boolean”中的 部分
  • @user3466773 这是一个类型变量。只是说泛型必须与集合中元素的类型相同(或子类型)。
  • 正如安迪·特纳所说。编译器只会确保当你调用这个方法时,如果你传递一个 Set 你也会传递一个 T 的实例,T 是任何可能的类型
【解决方案2】:

(除非你想在 add 方法成功/失败时做点什么,你应该使用 void 而不是你的泛型类型。)

这是一个应该可以工作的例子:

public void addToAList(Set<A> set, A generic){
      set.add(generic);
}

但是,如果您想创建一个通用的addToList 函数,您需要进一步推动它,因为您需要比较您在方法中输入的 Set 和 Object 之间的类。考虑到您不能在 Object 上调用 getClass() 或 .class,我认为您最简单(但根本不是最好的)方法是将其分成两种方法。 p>

【讨论】:

  • 是的,我想我必须做更多的事情来检查值本身,但我真的只需要知道如何构造我想要处理不同数据类型集的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多