如何使用Java Generics的单个方法替换这些特定于类型的方法?

时间:2011-08-09 22:42:57

标签: java generics

我正在尝试使用通用方法替换这些特定于类型的save方法:

public Apple save(Apple apple)
{
    pm.makePersistent(apple);
    pm.close();
    return apple;
}

public Orange save(Orange orange)
{
    pm.makePersistent(orange);
    pm.close();
    return orange;
}

这是我想出来的,但我无法弄清楚如何投出返回值:

public <T> T save(Object fruit, Class<T> model)
{
    pm.makePersistent(fruit);
    return result;
}

3 个答案:

答案 0 :(得分:3)

public <T> T save(T fruit)
{
    pm.makePersistent(fruit);
    pm.close();
    return fruit;
}

只是复制你之前完成的工作,这应该有效。您可能甚至不需要Class参数。

答案 1 :(得分:2)

为什么需要泛型?

为什么需要退还水果?该方法的调用者已经引用了fruit对象。

public void save ( Fruit fruit )
{
     pm.makePersistent(fruit);
     pm.close();
}

答案 2 :(得分:2)

上述例子是否真的需要泛型?

public <T extends Fruit> T save(T fruit) {
    pm.makePersistent(fruit);
    pm.close();
    return fruit; //Is this needed?
}

以上内容将为您完成,但如果makePersistent()方法采用任何类型的水果,则此示例中确实没有必要。

当然,如果真实用例有所不同,您可能需要它。