泛型,它可以用作单个参数而不是集合(arraylist等)

时间:2014-08-14 11:50:03

标签: generics wildcard extends

我被要求使用"?延伸" ,但要求传递单个参数但不作为列表。任何人都可以帮助我,我可以写下面的方法。我猜测我从泛型学中学到了什么? extends可以与集合对象一起使用,而不是单个对象。

public void verify(<? extends Account> account) {}

在方法中我需要检查传递的子类型,然后在另一个对象上发送适当的命令

任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:0)

也许您的问题不是很明确,但我认为您已经被要求提供可以接受并使用 Interface 帐户的方法,因此如果您使用{{3}在体内,您需要做的就是通过类型检查(可以认为不是一个好主意)并进行转换,以便逻辑能够根据 Accounts 完成操作。

<强> 更新

有时它表示类层次结构或使用它的代码(您的方法)可能需要重构或重构。但通常不会有重构/重组来避免这个问题。     我所做的就是这样的情况 - 显然你的接口帐户(或其某些扩展)需要一个调用方法,接口的每个实现者都可以编码以根据自己的需要以多态方式执行此任务 - 似乎是唯一的OO声音方法!对于这些,您可以使用Polymorphism

答案 1 :(得分:0)

是的,你可以这样做,很简单:

public void verify(Account account);

现在,您可以提交任何扩展Account 的内容。

class Account {}
class Account2 extends Account{}

verify(new Account2()); // works like a charm!

Java 中的类型已经是协变的,因此您不需要任何通配符。你不能在这里使用通配符,但你不必这样做。

答案 2 :(得分:0)

如果是设计,您可以尝试State Design Pattern 。这是有用的设计:

参与此模式的类和对象是:

上下文帐户) 定义客户感兴趣的接口 维护一个定义当前状态的ConcreteState子类的实例。

) 定义一个接口,用于封装与Context的特定状态相关联的行为。

具体状态 RedState,SilverState,GoldState ) 每个子类实现与Context

状态相关联的行为