"<T> Future<T> submit(Callable<T> task)" 中的第一个 <T> 代表什么?

4
我是一个Java新手,正在尝试学习返回类型的概念。我正在阅读ExecutorService接口的Java API:

enter image description here

我知道对于submit(Callable<T> task)方法,它返回一个T类型的Future对象,但是在Future<T>之前还有另一个<T>,它代表什么?

3
这是一条通用的方法声明,请参考这里获取更多详细信息。 - Maroun
5个回答

4

主要的<T>定义了T作为类型参数(也称为泛型),简单来说,这个函数使用了一个名为T的泛型类型参数,其中T是一个类型(在撰写本文时(Java 1.8),仅支持引用类型)

<T> void fn(T t); // T is a type parameter

例如,整数可以是具体类型。
<Integer>fn(1);

编译器通常可以按照以下方式推断类型
fn(1)

在您的示例中,提交一个 Callable<Integer> 将返回一个 Future<Integer>
Future<Integer> future = executor.submit(callableInteger);
Integer futureResult = future.get(); //type-saftey powered by generics 

您可以查看此文档了解更详细的解释。

3

它声明了一个类型变量,该变量的作用范围仅限于submit()方法。

Executor不是泛型的,但它的一些方法使用泛型类型,在方法修饰符和返回类型之间声明。


2

基本上,T是从 Future返回的值的类型(类)。

因此,如果您使用Future运行的任务返回一个String,那么T就是String。同样地,如果它返回一个整数,则TInteger

示例:

Future<String> future = executorService.submit( new Callable<String>(){
    public String call() throws Exception{
        return "the result";
    }
});
String result = future.get();
assert "the result".equals( result );

1

p”代表模板。不必为整数列表、浮点数列表等分别编写代码,只需为通用类型T编写一次代码,然后根据需要分配到不同的类型。


0

这是一个泛型方法的示例。泛型方法允许使用“类型参数”(在本例中)来表示一个或多个参数的类型和/或其返回类型之间的“依赖关系”。

在这种情况下,Future submit(Callable task) 中的 Future 表示 Future 和 Callable 指定的类型之间的依赖关系。

在另一种情况下,void copy(List dest, List src) 表示 T 和 S 之间存在一个依赖关系,即 S extends T。

如果没有这样的依赖关系,则不应使用泛型方法。 例如:void fn(T t) - 因为只有一个参数且没有返回类型,所以不需要指定前导符号来表示泛型方法。

更多细节请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接