我正在编写一个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) {
...
} 在这个函数中,我如何创建一个类的新实例,并将参数传递给构造函数,而不知道类的来源?
发布于 2013-02-24 23:54:03
在这里,Callable查找的不是BuyGiftForMyselfCallable的类型,而是它的返回值:Boolean。
所以使用Callable<Boolean>,即:
public void receive(Callable<Boolean> func){
...
}此外,您不会在此函数中创建可调用类的实例,而是在其他地方创建它们(构造函数和所有),然后将它们传递到此函数中。
发布于 2013-02-25 00:08:50
您可以使用反射example here或instanceof来找出实现类是什么,然后使用它做任何您想做的事情。但正如@vikingsteve在评论中提到的那样,这可能是一种不同的方法,你应该使用它来完全避免这样做的必要性
https://stackoverflow.com/questions/15053474
复制相似问题