JAVA里有很多这样的接口-able,我想模仿这个自己定义一个接口
public interface eatable{}  ——此接口下没有任何方法定义
然后我希望实现这个功能:
public apple implement eatable{ ......  }
user.eat(New apple()); //correctorpublic pen{ ......  }
user.eat(New pen()); //not implement eatable, throw NoEatException.怎么实现不实现 eatable 的话,每次eat都抛异常?

解决方案 »

  1.   

    http://topic.csdn.net/u/20071229/20/50c600d9-8369-4c75-a53b-73249696082b.html你不实现,应该都编译不过才对,这才能发挥 约束 的优势,强类型就这个好处,更早的发现问题,。
    不能吃你还喂它
      

  2.   

    通过只有传入接口类型参数才能启动方法的方法来进行约束类似于
    Thread(Runnable target) 
              Allocates a new Thread object.
      

  3.   

    可以看这个文章
    http://blog.csdn.net/Slugfest/archive/2008/01/10/2034359.aspx
      

  4.   

    一般来说-able都是采用instanceof来判别的,如果不实现一个标记接口的话,则需要指明特定的类型。
    如果需要在编译期告知,可以采用泛型参数。如果需要运行时抛出异常采用:
    if(!(arg instanceof apple)) {
        throw new NoEatException();
    }
      

  5.   

    看错了:运行期抛出异常,在eat方法中加上:if(!(arg instanceof Eatable)) {
        throw new NoEatException();
    }需要在编译期报错,eat方法采用泛型方法:public static <M extends Eatable> void eat(M arg);不实现Eatable的话,做不到,因为eat并不知道哪些能吃哪些不能吃的。
      

  6.   

    public static <M extends Eatable> void eat(M arg);

    C#泛型的where constraints一样 都是那么尴尬