【问题标题】:"> expected" error on creating a class with generics"> 预期的" 使用泛型创建类时出错
【发布时间】:2017-09-25 10:57:08
【问题描述】:

我正在使用泛型创建一个类

public class MyEntry<K,Set<V extends SpecificEntry>> extends TimerTask{
//
}

但这会产生错误 > 预期 如我所见,钻石运算符已正确关闭

如果我成功了

public class MyEntry<K,Set> extends TimerTask{
//
}

它有效,但我希望第二个参数是一组特定类型。

应该怎么做才能做到这一点?

【问题讨论】:

  • 在第一代 Java 泛型中,必须在 &gt;s 之间放置一个空格。但似乎 Jiri Tousek 发现了问题。

标签: java class generics generic-collections


【解决方案1】:

如果您希望第二个泛型参数是您需要的给定类型的 Set:

public class MyEntry<K,V extends Set<? extends SpecificEntry>> extends TimerTask

顺便说一句,public class MyEntry&lt;K,Set&gt; extends TimerTask 不像你想的那样工作。在您的情况下,Set 是第二个泛型类型参数的名称,与 java.util.Set 无关。

【讨论】:

  • 您在 Set 上的信息很有趣。我需要的是一个 java.util.Set
  • @rajesh 这是个问题吗?我的意思是在MyEntry&lt;K,Set&gt;中,Set只是一个名字,并不代表java.util.Set接口。
【解决方案2】:

一种可能的解决方案是不对Set 泛型类型使用参数,而是仅参数化Set 的元素类型

public class MyEntry<K, V extends SpecificEntry> extends TimerTask{
    //
}

然后在需要的地方使用Set&lt;V&gt;

【讨论】:

  • 但是我的要求需要第二个参数是一个集合
  • 包含一个关于您打算如何使用类型参数的最小示例可能会有所帮助,这样就很清楚为什么需要&lt;V extends Set&gt; 作为类型参数。
猜你喜欢
  • 2020-10-05
  • 2018-04-03
  • 2020-05-15
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多