2017-07-14 24 views
-5

其關於編譯這種方法,其中T是通用的。有沒有辦法用javac編譯器(Java 1.8)編譯而不會出現任何錯誤?在Java中編譯這些行 - 可能以任何方式?

public class MyGenericClass<T>{ 
    public void someGenericAction(T value){ 
     int key = (int) value; 
    } 
} 

來自德國的問候!

+3

至少增加約你的錯誤信息。 –

+1

向我們展示你的努力,我們可以幫你 – sForSujit

+0

java:不兼容的類型:T不能轉換爲int。它只是關於如果可以做任何事情(配置編譯器......)。 –

回答

0

你可以做到這一點

class MyGenericClass<T>{ 
     public static <T>void someGenericAction(T value){ 
      int key = (Integer)value; // here is your's 
      System.out.println(key); 
     } 

     public static void main(String[] args){ 
      someGenericAction(12); 
     } 
} 
+0

這對OP有什麼幫助? – EJoshuaS

+0

他只需將他的「int」更改爲「Integer」 – divine

+0

感謝您的回答。我也試過這個,它的工作原理。但由於某些原因,我有「任務」來編譯我的問題中提到的幾行。只需編譯而不會出現錯誤,沒有別的。也許這是不可能的,但我不確定它。 –

0

你基本上要求一個骯髒的黑客:一般來說,如何任何類型被強制爲int

讓我們希望T有一個合理的toString方法,並利用這一點:

int key = Integer.parseInt(value.toString()); 

這一點,因爲在Java中的所有對象將至少編譯有toString()方法。但是,處理可能在運行時拋出的無數異常是您的工作。您可以爲您的函數添加重載,以適應其他基本類型和特定類型的T,您可以在這裏執行比使用toString()方法更明智的操作。

+0

感謝您的回答,但可以編譯我的代碼行嗎? F.E.改變一些編譯器設置或類似的東西? –

+0

@MarvinKrüger:希望。我認爲你真的需要重新考慮你的設計 - 查看問題評論。我在這裏給出的方法是「臭」。 – Bathsheba

+0

我只是想知道它的一般可能以任何方式編譯... 我知道它絕對不是最佳實踐,但多數民衆贊成並不重要:) –

2

我肯定希望這在Java中是不可能的。不能保證任何類型的任何類型都可以「直接」並安全地轉換爲int,這正是您的方法所要求的。實際上,對於絕大多數類型來說,這將會是而不是

什麼是(int)"abc"甚至的意思是,例如? (在你提供的方法中,這在技術上是可行的,因爲​​對於你的方法來說是一個完全有效的輸入)。這個演員顯然是無稽之談,Java不應該允許。你可以想出很多像這樣的情況,這種情況顯然是無稽之談。

在技術上可行的情況下,它也可能導致微妙的錯誤。例如,(int)11.2將導致四捨五入(等於11),並因此導致數據丟失。

TL; DR不,這是不可能的,你不希望是可能是因爲你試圖做一些事情,根本沒有意義。

相關問題