什么是<t> in&lt; 34; <t> Future <t>提交(Callable <t>任务)&#34;代表?

时间:2016-02-26 22:41:07

标签: java generics methods interface

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

enter image description here

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

5 个答案:

答案 0 :(得分:4)

前导<T>T定义为类型参数(也称为泛型),简单来说,该函数使用名为T的泛型类型参数,其中T为类型(在编写本文时(Java 1.8),仅支持引用类型)

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

例如,Integer可以是具体类型

<Integer>fn(1);

编译器通常可以推断出类型如下

fn(1)

在您的示例中,提交Callable<Integer>会返回Future<Integer>

Future<Integer> future = executor.submit(callableInteger);
Integer futureResult = future.get(); //type-saftey powered by generics 

您可以查看this以获取详细说明。

答案 1 :(得分:3)

它声明了一个只有submit()方法范围的类型变量。

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

答案 2 :(得分:2)

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

因此,如果您使用Future运行的任务返回String,则TString。同样,如果它返回一个整数,则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 );

答案 3 :(得分:1)

代表模板。而不是单独编写整数列表,浮点数列表等,只需为泛型类型T编码一次,然后根据需要分配给不同的类型。

答案 4 :(得分:0)

这是通用方法的示例。通用方法允许“类型参数”(在这种情况下)用于表示方法的一个或多个参数的类型和/或其返回类型中的“依赖项”。

在这种情况下,Future前面的Future提交(Callable任务)指示为Future和Callable指定的类型之间的依赖性。

在另一种情况下,void copy(List dest,List src)表示T和S具有S扩展T的依赖项。

如果没有这种依赖性,则不应使用通用方法。 例如:void fn(T t)-由于只有一个arg且没有返回类型,因此无需指定Lead来指示通用方法。

更多详细信息here