【问题标题】:Method parameter must be obj of certain class that implements certain interface方法参数必须是实现某个接口的某个类的obj
【发布时间】:2013-01-31 16:48:29
【问题描述】:

如何声明一个带有参数的方法,该方法的参数必须是某个实现某个接口的类而不为此声明一个特殊的类?
假设我已经声明了类 ImageX 并且还声明了接口标记。所以我需要创建一些其他类或方法,它必须只接收实现标记接口的 ImageX 实例。如何声明这样的方法?像

private void someMethod (ImageX<Tagging> obj){} 

但这当然是不正确的。是的,如果它实现了所需的接口,我可以检查 obj,但我想要检查参数。如果它不是某种方法而是构造函数怎么办...
我是在问泛型吗?

【问题讨论】:

  • 所以你想要一个Tagging 接口,以及一个单独的ImageX 类,它 实现Tagging,然后你想要一个方法接受ImageX 的实例,但前提是它们 实现Tagging?我建议想要这样做表明需要重构。
  • 是的,我想要它。这是关于android的,类是Activity,它实现了一些需要的接口。但并不是每个活动都这样做,我不想仅仅为此而对活动进行子类化。
  • @stan:我明白了。幸运的是,assylias 给出了答案(也是一个很酷的答案)。

标签: java android generics methods constructor


【解决方案1】:

您可以使用类型交集使该方法成为通用方法,并且只接受既是 ImageX 又是 Tagging 的对象:

private <T extends ImageX & Tagging> void someMethod (T obj){} 

【讨论】:

  • +1 Niiii​​ice。我想避免它,但很高兴拥有它。 (通用方法简直太酷了。)如果有人想看到它的实际效果:pastie.org/6179036
  • @T.J.Crowder 它回答了这个问题,但它不一定是你指出的最佳方法!
猜你喜欢
  • 2022-01-22
  • 2011-04-30
  • 2019-12-05
  • 2014-01-02
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多