接口:
public interface MyInterface {
public <T is/extends of the type of the implementing class> void method(T object);
}
类:
public class A implements MyInterface {
public void method(A object) {
...
}
}
我想避免的是一个类能够用另一个类来实现MyInterface接口,而这个类和该类本身相同。因此,以下情况是不允许的:
public class A implements MyInterface<B> {
public void method(B object) {
...
}
}
编辑:
好的,我会尝试用另一种方式来描述我想要实现的目标。 我想要有几个类,这些类有一个方法,接受该类类型的参数。 所以除了上面提到的A类之外,假设还有另一个B类看起来像这样:
public class B implements MyInterface {
public void method(B object) {
...
}
}
类A和B共同拥有一个名为“method”的方法,该方法接收一个类型为该类本身的参数。
在我的项目中,我想实现以下内容。我正在编写一个小游戏,并希望实现某种形式的碰撞检测。基本上,我想通过一些“智能”的多态调用来完成这个任务。
我定义了一个名为ICollisionReceiver的接口,它看起来像这样:
public interface ICollisionReceiver<T extends IShape> extends IShape {
public boolean collides(T t);
}
我定义了另一个接口,如下:
public interface ICollisionChecker<T extends ICollisionChecker<T>> extends IShape {
public void addCollisionReceiver(ICollisionReceiver<T> receiver);
public void removeCollisionReceiver(ICollisionReceiver<T> receiver);
}
例如,我的播放器实现了接口ICollisionReceiver,因为播放器会接收碰撞并处理它们。这应该以一种通用的方式完成,因此例如我有方框和圆形,现在Player实现了ICollisionReceiver<Box>和ICollisionReceiver<Circle>,因此我有了两种方法。
@Override
public boolean collides(final Box b) {
...
return false;
}
并且
@Override
public boolean collides(final Circle c) {
...
return false;
}
在我的盒子和圆形类中,我可以注册ICollisionReceivers,然后在更新方法中执行以下操作:
boolean conti = true;
int i=0;
while(conti && i<collisionReceivers.size()) {
final ICollisionReceiver<Bonus> rec = collisionReceivers.get(i);
if(this.collidesWith(rec)) {
conti = rec.collides(this);
}
++i;
}
这基本上检查此框是否与特定接收器发生碰撞,然后调用接收器的collides() 方法。
现在重点是,我希望确保框和圆两个类都只使用自己的类型来实现ICollisionChecker接口。
我可以通过像这样做来显式地实现:
public class Bonus extends AnimatedSprite implements ICollisionChecker<Bonus>...
但这对我来说并不令人满意...很抱歉发了这么长的帖子,希望现在清楚了。