【问题标题】:Java Method signature with generic return class具有通用返回类的 Java 方法签名
【发布时间】:2010-12-03 18:48:13
【问题描述】:

以下2个方法签名有什么区别:

public <T extends MyClass> Set<T> getMyList() {...}

public Set<? extends MyClass> getMyList() {...}

【问题讨论】:

  • 奇怪的是你应该返回一个“列表”作为Set。 :)

标签: java methods generics declaration signature


【解决方案1】:

在第一个中,T 可以在方法主体中访问,而在第二个中则不是。这是否有用取决于方法的工作。

【讨论】:

    【解决方案2】:

    对于第一个,您可以将其用作:

    Set<MyClass> set = thing.getMyList();
    Set<MyDerivedClass> set = thing.getMyList();
    Set<?> set = thing.getMyList();
    Set<? extends MyClass> set = thing.getMyList();
    Set<? extends MyDerivedClass> set = thing.getMyList();
    

    对于第二个,你更受限制:

    Set<?> set = thing.getMyList();
    Set<? extends MyClass> set = thing.getMyList();
    

    您希望如何实施第一个?第二个不好,因为它强制客户端代码使用通配符。

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多