【问题标题】:Generics inconsistently using Type? [duplicate]泛型使用类型不一致? [复制]
【发布时间】:2023-03-03 07:44:23
【问题描述】:

这是我的最后一堂课。

public class ActivitiesSQL implements Activities {
  ...

  @Override
  public boolean add( Activity e ) {
    throw new UnsupportedOperationException( "Not supported yet." ); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean remove( Object o ) {
    throw new UnsupportedOperationException( "Not supported yet." ); //To change body of generated methods, choose Tools | Templates.
  }
}

public interface Activities extends Repository<Activity, ActivityId> {
    ...
}

public interface Repository<T, ID> extends Set<T> {

  public abstract T findById( ID id );
}

我想了解的是为什么生成的代码是remove( Object...add( Activity ...)。为什么不是remove( Activity ... )

【问题讨论】:

  • 因为这是你的基本类型声明的内容。
  • 但是addremove AFAIK 来自同一个地方,所以他们不应该都以对象或活动结束吗?在我的实现类中
  • remove 方法在哪里,你正在实现/覆盖,定义?
  • 我想我只是从来没有想到会在 Set 中不一致地定义我认为这是我正在做的事情。

标签: java generics


【解决方案1】:

假设您扩展的Setjava.util.Setremove() 的参数类型为Object,因为这是java.util.Set 中定义的方式。

您可以在Repository 中定义自己的remove(T) 并委托给Set#remove()(如果您愿意),但它不再是@Override

另请参阅this answerthis answer

【讨论】:

    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多