2017-03-16 340 views
0

我想让我的Java方法返回一个泛型T.我无法让它工作。我的方法在一个线程池执行器上执行一个传入的方法,并通过Future.get()等待结果,我想将结果传递回来,这个结果可以根据传递给供应商的方法而有所不同。从java方法返回泛型类型

这是我有,它的工作原理,但我需要使用时转换到正确的类型。我宁愿使用Tt风格而不是Object。

public Object executeThis(Supplier<T> request) throws RejectedExecutionException { 
    Object obj = null; 

    try { 
     Future future = executor.submit(() -> request.get()); 
     obj = future.get(timeoutInMilis, TimeUnit.MILLISECONDS); 
    } catch (ExecutionException | InterruptedException e) { 
    } 
} 
+1

请给出一个完整的[mcve]并提供你得到的错误信息。 – GhostCat

回答

2

要返回一个泛型类型:

public <T> T executeThis(Supplier<T> request){} 

你只需要钻石运营商内部的返回类型之前声明泛型类型,然后声明该方法的返回类型(T)

你有修改此:

Future future = executor.submit(() -> request.get()); 
obj = future.get(timeoutInMilis, TimeUnit.MILLISECONDS); 

Future<T> future = executor.submit(() -> request.get()); 
T obj = future.get(timeoutInMilis, TimeUnit.MILLISECONDS); 
+0

非常完美,非常感谢Eric,非常清楚准确的答案。我没有提到的一件事是,我的方法executeThis是在这样一个类中声明的。 MyExecuterClass 所以我也不得不删除位然后你的答案工作。 – mrmannione

+0

@ user3169180:你能接受它作为答案吗? – 2017-03-16 20:36:27

+0

当然没问题 – mrmannione