Generics

Generics ,generics,wildcard,extends,Generics,Wildcard,Extends,我被要求使用?扩展,但要求传递单个参数,但不作为列表传递。有人能帮我吗?我可以用下面的方法写一些东西。我想我从泛型学过什么?extends可用于集合对象,而不是单个对象 public void verify(<? extends Account> account) {} 在方法中,我需要检查传递的子类型,然后在另一个对象上发送适当的命令 任何帮助都将不胜感激 谢谢。也许您的问题不太清楚,但我认为您被要求提供可以接受并使用接口帐户的方法,因此如果您使用,在正文中,您所需要做的只是通过

我被要求使用?扩展,但要求传递单个参数,但不作为列表传递。有人能帮我吗?我可以用下面的方法写一些东西。我想我从泛型学过什么?extends可用于集合对象,而不是单个对象

public void verify(<? extends Account> account) {}
在方法中,我需要检查传递的子类型,然后在另一个对象上发送适当的命令

任何帮助都将不胜感激


谢谢。

也许您的问题不太清楚,但我认为您被要求提供可以接受并使用接口帐户的方法,因此如果您使用,在正文中,您所需要做的只是通过类型检查,这可能被认为不是一个好主意,并强制转换,以便逻辑能够根据帐户完成操作

更新:

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

是的,你可以做到,非常简单:

public void verify(Account account);
现在,您可以提交任何扩展帐户的内容


Java中的类型已经是协变的,所以您不需要任何通配符。您不能在此处使用通配符,但不必使用。

如果是design,您可以尝试。这是一种有帮助的设计:

参与此模式的类和对象包括:

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

州 定义一个接口,用于封装与上下文的特定状态关联的行为

混凝土州红州、银州、金州
每个子类实现一个与上下文状态相关的行为

与public void verifyAccount相比,它有什么好处?不,我需要只接受子类型,这就是为什么,我在eclipse中尝试它,使用时会出现编译错误?扩展帐户。你是说你不想接受帐户实例吗?因为好的,谢谢,那么还有什么选择呢?那你为什么只接受子类型而不接受帐户呢?这真是个奇怪的要求。你确定这就是你所需要的吗?谢谢,方法应该只接受子类型,类型检查我根本不想做,还有什么替代方法?是的,我将把超级类型声明为抽象类型,在方法中,我需要检查传递的子类型,然后在另一个对象上发送相应的命令。编辑我的初始问题。@user1688879:为什么需要检查传入的子类型?这通常是一种设计的味道…哦,我没有意识到它实际上是设计的味道。实际上是从以这种方式设计它的负责人那里得到的:要求是:我正在实现EventBus,所以听一种类型的事件子类型,我需要发布另一种事件子类型,所以您能建议我如何以更好的方式设计它,确保实现正确的设计吗。
class Account {}
class Account2 extends Account{}

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