【问题标题】:How to use generic function parameter如何使用泛型函数参数
【发布时间】:2017-09-29 10:52:29
【问题描述】:

我想对两种类型使用一种方法,我试过这样:

private <T extends Base> boolean isNeeded(String name, T receivedItem) {
    Base item = null;
    if (receivedRequest.getClass().equals(Derived1.class)) {
        item = (Derived1) receivedItem;
    } else if (request.getClass().equals(Derived2.class)) {
        item = (Derived2) receivedItem;
    }
    callMethodDoSomething(item.getData().getSpecificData());
}

但我不知道如何调用仅在派生类中的方法。哪种方法最好、最安全?

【问题讨论】:

  • 很难理解实际问题是什么......如果您提供实际调用子类(类)方法并且无法编译的代码,它会变得更好。这些调用是否应该在每次转换后立即出现在每个 if 块内。无论是扩展Derived1 还是Derived2callMethodDoSomething 是该项目都会收到的常见处理吗?
  • 另外两个演员(Derived?)有点没用。

标签: java generics methods generic-programming


【解决方案1】:

这就是方法重载的目的。

boolean isNeeded(String name, Derived1 item) { 
   return callMethodDoSomething(
        item.getData().getSpecificData());
}

boolean isNeeded(String name, Derived2 item) { 
   return callMethodDoSomething(
        item.getData().getSpecificData());
}

【讨论】:

    【解决方案2】:

    为什么不直接

    boolean isNeeded(Base base) { 
        return callMethodDoSomething(base.getData().getSpecificData());
    }
    

    ('name'参数也跳过,因为它没有被使用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      相关资源
      最近更新 更多