是否可以使两个Java接口互斥?

Pet*_*der 10 java

我有两个应该相互排斥的接口:

interface Animal{}
interface Cat extends Animal{}
interface Bird extends Animal{}
Run Code Online (Sandbox Code Playgroud)

如何防止实现两者CatBird接口的类的实现?

class Impossible implements Cat, Bird{}
Run Code Online (Sandbox Code Playgroud)

Pet*_*der 10

最后一个肮脏的解

public interface Animal<BEING extends Animal> {}
public interface Cat extends Animal<Cat> {}
public interface Bird extends Animal<Bird> {}
public class CatBird implements Cat, Bird {} // compiler error
public interface CatBird extends Cat, Bird {} // compiler error
Run Code Online (Sandbox Code Playgroud)

CatBird无法实施,因为:

接口Animal不能使用不同的参数多次实现:Animal <Bird>和Animal <Cat>


Nic*_*ckJ 8

在这里你有一个清晰的层次结构 - 一个带分支的根,很明显一个节点(类,接口,等等)不能在多个分支上.为了强制执行此操作,请使用抽象类而不是接口.

当存在某些交叉方面时可以使用接口,这些方面可以在层次结构中的任何类之间共享,并且没有两个接口是互斥的.

例:

public abstract class Animal;
public interface CanFly;
public interface CanHunt;
public abstract class Cat extends Animal implements CanHunt;
public abstract class Bird extends Animal implements CanFly;
public class Vulture extends Bird implements CanHunt; //also CanFly because of Bird
Run Code Online (Sandbox Code Playgroud)

至少有一个人考虑过这个问题:http://instantbadger.blogspot.co.uk/2006/10/mutually-exclusive-interfaces.html

  • 我也不是.挫败者真的应该提供反馈. (2认同)