强制类型参数在java泛型中实现特定方法

Sha*_*nKo 5 java generics

有没有办法在java泛型中强制类型参数来实现equals方法?例如,我写了这个类:public class Bag<Item> implements Iterable<Item>它有contains方法,使用Item.equals方法.所以我想确保泛型中传递的Object也将实现该equals方法.

Gra*_*min 7

你可以创建一个名为abstract的抽象基类ItemBase,然后使用Item extend ItemBase.

public abstract class ItemBase {

  @Override
  public abstract boolean equals(Object o);
}

public class Bag extends ItemBase
Run Code Online (Sandbox Code Playgroud)

这将强制任何实现ItemBase的人专门实现equals

  • 很想知道为什么Java允许这个.对我而言,这是对多态性的一种相当大的违反,并且违反了最少惊喜的原则(为什么它与接口有如此不同?) (3认同)