【问题标题】:Why does the implementation of a method from a interface cast parameters to Object(or extends YourObject)?为什么从接口转换参数到Object(或扩展YourObject)的方法的实现?
【发布时间】:2015-10-23 23:23:11
【问题描述】:

我有一个界面

public interface GenericRepository<T extends GenericObject> {
    String add(T t);
}

我尝试按预期实现它

public class GenericMongoRepository<T extends GenericObject> 
implements GenericRepository{
@Override
public String add(T  t) {
  return null;
}

这不起作用。接口需要这样的实现。

public class GenericMongoRepository<T extends GenericObject> 
implements GenericRepository{
@Override
public String add(GenericObject  genericObject) {
  return null
}

【问题讨论】:

    标签: java generics types interface casting


    【解决方案1】:

    当你实现一个接口时,你还需要传入 T,它取自实现(替换为类型)。

    解决方案:

    public class GenericMongoRepository<T extends GenericObject> 
    implements GenericRepository<T>{
    @Override
    public String add(T genericObject) {
      return null;
    }
    

    【讨论】:

    • 方法中的参数现在可以是T,+1
    【解决方案2】:

    为什么从接口实现方法的参数转换为Object(或扩展YourObject)?

    没有。

    接口需要这样的实现。

    public class GenericMongoRepository<T extends GenericObject> 
    implements GenericRepository
    @Override
    public String add(T  t) {
      return null;
    }
    

    不,它没有。它期望这样:

    public class GenericMongoRepository<T extends GenericObject> 
    implements GenericRepository<T>
    @Override
    public String add(T  t) {
      return null;
    }
    

    【讨论】:

    • 是的,我试图指出,如果你忘记了 ,预期的实现会发生变化,因为没有传入 T 类型。我想这可能是一个令人困惑的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多