我正在编写一个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) {
...
}
如何在这个函数中创建一个类的新实例并将参数传递给构造函数而不知道类的来源?
答案 0 :(得分:0)
此处,Callable不会查找BuyGiftForMyselfCallable
的类型,而是查找其返回值:Boolean
。
所以使用Callable<Boolean>
,I.E。:
public void receive(Callable<Boolean> func){
...
}
此外,您不会在此函数中创建Callable类的实例,而是在别处创建它们(构造函数和所有函数) - 然后将它们传递给此函数。
答案 1 :(得分:0)
您可以使用反射example here或使用instanceof
来查找实现类的内容,然后根据需要执行操作。但正如@vikingsteve在评论中提到的那样,你应该采用一种不同的方法来避免这样做的必要性