使用参数</t>传递Callable <t>

时间:2013-02-24 15:51:14

标签: java generics

我正在编写一个Java应用程序,其中包含从用户钱包中扣除资金的通用模块。

所以课程如下:

public class BuyGiftForMyselfCallable implements Callable<Boolean> {

private String username;
private long coins;

public BuyGiftForMyselfCallable(final String username,final long coins) {
    this.username=username;
    this.coins=coins;
}

@Override
public Boolean call() throws Exception {

    ...
    }

我想将这个类传递给一个不了解BuyGiftForMyselfCallable的函数。它只知道Callable!

所以我有以下内容:

function receiver(Callable<*> func) {
...
} 

如何在这个函数中创建一个类的新实例并将参数传递给构造函数而不知道类的来源?

2 个答案:

答案 0 :(得分:0)

此处,Callable不会查找BuyGiftForMyselfCallable的类型,而是查找其返回值:Boolean

所以使用Callable<Boolean>,I.E。:

public void receive(Callable<Boolean> func){
  ...
}

此外,您不会在此函数中创建Callable类的实例,而是在别处创建它们(构造函数和所有函数) - 然后将它们传递给此函数。

答案 1 :(得分:0)

您可以使用反射example here或使用instanceof来查找实现类的内容,然后根据需要执行操作。但正如@vikingsteve在评论中提到的那样,你应该采用一种不同的方法来避免这样做的必要性