簡體   English   中英

如何在 java 中將泛型(Char 或 Integer)變量轉換為 int

[英]how do you convert a generic(Char or Integer) variable into an int in java

T 可以是 integer 或字符,否則它應該是 output 錯誤(這是我想要的)。

我下面的方法是嘗試將參數從 char 轉換為 int 或將 int 轉換為 int。

如果沒有泛型並且 T 是 int 或 char 我沒有問題,但由於它沒有定義,它不會讓我編譯。

有什么辦法可以繞過這個,還是有另一種轉換通用變量的方法?

當前代碼給出錯誤:

incompatible types: T cannot be converted to int
        int toReturn = gKey;
public class MyClass<T>{
    private int convert(T gKey){
        int toReturn = gKey;
        return toReturn;
    }
}

Edit1: {toReturn 而不是 1} 我犯了一個錯誤並更正了

Edit2:使用 extends Number 解決方案,這是我得到的結果

    public static void main(String[] args) {
        //test 1 for integer argument, should output 1:: success
        Test<Integer> test1 = new Test<>();
        int a = 1;
        System.out.println(test1.convert(a));
        //test 2 for character argument, should output 65 :: failure compile error
        Test<Character> test2 = new Test<>();
        char b = 'A';
        System.out.println(test2.convert(b));
    }

將參數從 char 轉換為 int

我假設您想取一個數字字符值,例如“1”並將其轉換為 integer。 如果是這樣,那么就像這樣簡單地完成:

char c = '1';
int i = Integer.parseInt(String.valueOf(c));

當然,這種轉換只適用於數字字符。 因此,您必須以某種方式處理異常,以處理char參數不代表數字的情況。 例如:

try {
    int i = Integer.parseInt(String.valueOf(c));
} catch (NumberFormatException nfe) {
    // do something here
}

另一方面,如果您的意圖是將char轉換為int以獲取字符的 ASCII 值,則只需將char類型轉換為int

char c = 'a';
int i = (int) c; // i should be 97 decimal (61 hex)

我不知道您為什么要這樣做,但它是基於您將char轉換為int的簡單陳述的替代方案

將參數從 int 轉換為 int

這應該只是返回參數。 不需要“轉換”。

解決方案

由於您使用T作為參數,因此您需要在代碼中進行一些檢查。

if (arg instanceof Character)
    return Integer.parseInt(String.valueOf((char)arg));
if (arg instanceof Integer)
    return (int) arg;
// for all other cases, either throw exception (i.e. `IllegalArgumentException`) or return some erroneous value (i.e. if the expected return value is zero or greater, you could return -1)

嘗試使用 instanceof。

  1. 如果您想將任何字符表示為 ASCII 碼:
private int convert(T gKey) {
 if (gKey instanceof Integer)
    return ((Integer) gKey).intValue();
 else 
   if (gKey instanceof Character)
      return ((Character) gKey).charValue();
   else throw new IllegalArgumentException("IllegalArgumentException");
}
  1. 如果您只想處理 char 女巫代表數字並轉換為此類數字,而不是 ASCII 碼:
private int convert(T gKey) {
  if (gKey instanceof Integer)
     return ((Integer) gKey).intValue();
  else 
    if (gKey instanceof Character)
       try {
            return Integer.parseInt(Character.toString((Character) gKey));
           }
       catch (NumberFormatException e) {
             throw new NumberFormatException ("NumberFormatException ");
           }          
    else throw new IllegalArgumentException("IllegalArgumentException");
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM