我想为自己编写一个小库。这是我想在其中提供的一些代码。
public class ThreadUtils {
private static String result;
public static Void runInBackground(final Callable<Void> func) {
new Thread(new Runnable() {
public void run() {
try {
func.call();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
return null;
}
public static String runInBackground(final Callable<String> func) {
result = "";
new Thread(new Runnable() {
public void run() {
try {
result = func.call();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
return result;
}
}
我很惊讶我的 IDE 说它无法工作,因为有重复的声明。这是为什么,正常情况下它会识别出参数不同,但它不会? 如何才能让 runInBackground 能够返回不同的原始类型?
最佳答案
由于类型删除,Java 中的泛型在运行时不可用。这意味着您有两个具有相同名称和相同参数类型的方法,因此 Java 无法选择使用哪一个。
您必须为您的方法指定不同的名称:
public static Void calculateVoidInBackground(final Callable<Void> func) {
...
}
public static String calculateStringInBackground(final Callable<String> func) {
...
}
回答你的第二个问题:原始类型不能用作泛型参数。不过,您可以使用 Java 提供的包装类(例如 Integer
、Long
、Double
)。由于自动装箱,原始类型会自动转换为包装类的实例,反之亦然:
public static int calculateIntInBackground(final Callable<Integer> func) {
...
}
关于java - Java 线程中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649378/