【发布时间】:2020-10-11 02:25:06
【问题描述】:
我想做什么
我有一个名为strategy 的接口,它有一个方法strategise。该方法接受一个名为Entity 的接口作为参数。
public interface Strategy{
void strategise(Entity entity);
}
public interface Entity {
void do_something();
}
我有一个名为 EntityImpl 的类,它实现了 Entity。 EntityImpl 有一个 Entity 没有的额外方法。
public class EntityImpl implements Entity{
void do_something() // defined in Entity interface
void do_something_else() // unique to Person
}
我有另一个类StrategyImpl 实现了strategy。
-
StrategyImpl期望将EntityImpl对象作为参数传递给它从Strategy实现的函数:strategise。 - 这是因为
StrategyImpl.strategise()调用了EntityImpl独有的方法,该方法未在Entity中定义:do_something_else()。
public class StrategyImpl implements Strategy {
void strategise(Entity entity){
entity.do_something_else();
}
}
我尝试过的事情
- 如果我使用上面的代码,它将无法工作,因为无法找到
entity.do_something_else(),因为do_something_else是EntityImpl独有的,并且未在Entity中定义。
public class StrategyImpl Strategy{
void strategise(Entity entity){
entity.do_something_else();
}
}
- 我尝试使用
EntityImpl对象而不是Entity对象作为StrategyImpl.strategise()中的参数定义,但这不起作用,因为它认为我没有实现Entity.strategise()
public class StrategyImpl Strategy{
void strategise(EntityImpl entity){
EntityImpl.do_something_else();
}
}
- 我尝试过使用泛型和通配符,但我对 java 不熟悉。
public interface Strategy {
void strategise((E implements Entity) entity);
}
任何帮助将不胜感激
感谢您的宝贵时间!
【问题讨论】:
-
虽然你没有这么说,但我猜你是想把所有的策略都放在一个集合里什么的?
-
Nup。只是每个实体对象都有唯一的策略对象。但是策略有很多通用的方法。
-
这听起来就像泛型的情况一样:
<E extends Entity>。
标签: java generics inheritance wildcard implementation