2017-03-16 338 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