其關於編譯這種方法,其中T是通用的。有沒有辦法用javac編譯器(Java 1.8)編譯而不會出現任何錯誤?在Java中編譯這些行 - 可能以任何方式?
public class MyGenericClass<T>{
public void someGenericAction(T value){
int key = (int) value;
}
}
來自德國的問候!
其關於編譯這種方法,其中T是通用的。有沒有辦法用javac編譯器(Java 1.8)編譯而不會出現任何錯誤?在Java中編譯這些行 - 可能以任何方式?
public class MyGenericClass<T>{
public void someGenericAction(T value){
int key = (int) value;
}
}
來自德國的問候!
你可以做到這一點
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);
}
}
你基本上要求一個骯髒的黑客:一般來說,如何任何類型被強制爲int
?
讓我們希望T
有一個合理的toString
方法,並利用這一點:
int key = Integer.parseInt(value.toString());
這一點,因爲在Java中的所有對象將至少編譯有toString()
方法。但是,處理可能在運行時拋出的無數異常是您的工作。您可以爲您的函數添加重載,以適應其他基本類型和特定類型的T
,您可以在這裏執行比使用toString()
方法更明智的操作。
感謝您的回答,但可以編譯我的代碼行嗎? F.E.改變一些編譯器設置或類似的東西? –
@MarvinKrüger:希望。我認爲你真的需要重新考慮你的設計 - 查看問題評論。我在這裏給出的方法是「臭」。 – Bathsheba
我只是想知道它的一般可能以任何方式編譯... 我知道它絕對不是最佳實踐,但多數民衆贊成並不重要:) –
我肯定希望這在Java中是不可能的。不能保證任何類型的任何類型都可以「直接」並安全地轉換爲int
,這正是您的方法所要求的。實際上,對於絕大多數類型來說,這將會是而不是。
什麼是(int)"abc"
甚至的意思是,例如? (在你提供的方法中,這在技術上是可行的,因爲對於你的方法來說是一個完全有效的輸入)。這個演員顯然是無稽之談,Java不應該允許。你可以想出很多像這樣的情況,這種情況顯然是無稽之談。
在技術上可行的情況下,它也可能導致微妙的錯誤。例如,(int)11.2
將導致四捨五入(等於11
),並因此導致數據丟失。
TL; DR不,這是不可能的,你不希望它是可能是因爲你試圖做一些事情,根本沒有意義。
至少增加約你的錯誤信息。 –
向我們展示你的努力,我們可以幫你 – sForSujit
java:不兼容的類型:T不能轉換爲int。它只是關於如果可以做任何事情(配置編譯器......)。 –