2017-09-29 135 views
0

我想用一个方法为两种类型,我尝试这样的:如何使用泛型函数参数

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()); 
} 

但我不知道该怎么称呼这是只有在派生类的方法。哪种做法最好,最安全?

+0

这是相当难以理解的实际问题是什么?它会如果您提供实际调用子类(类)方法且未能编译的代码,则会使事情更好。这些调用应该在每个演员阵容之后在每个'''if'''块内。是'''callMethodDoSomething''这个项目可以接受的常见处理,无论它是否扩展Derived1'或Derived2'' –

+0

也是两个cast'''(Derived?)''' '是没用的。 –

回答

1

这就是重载的方法。

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

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

为什么不

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

(也跳过“名称”参数,因为它不使用)