2017-10-18 63 views
-4

我想檢查,如果我的泛型類型是整數。如果他們是,他們應該被轉換爲兩倍,之後應該加在一起。我得到錯誤「運算符*未定義爲參數類型(s)E,double」。之後將兩個鑄造值一起添加也是同樣的問題。泛型沒有施加和加在一起

我該如何解決這個問題?

感謝提前:)

public void add(E value1, E value2) { 
      if(value1 instanceof Integer && value2 instanceof Integer) { 
       double valueCast1 = value1 * 1.0; 
       double valueCast2 = value2 * 1.0; 
       System.out.println(value1 + value2); 
      } 
     } 
+1

? – Kayaman

+0

我認爲Kayaman可能會問的是爲什麼你會想要乘以1. – Griffin

+0

Java和JavaScript是兩種不同的語言... * 1.0是爲JavaScript ... –

回答

-1

如果我沒有記錯,你需要使用通用的,因爲它的確認它是一種後鑄造自我:

(int)value1 

雖然這可能是一個csharp的東西..

+0

這隻有在'value1'和'value2'被聲明爲'Integer'時纔會有效。由於'E'沒有任何限制,因此「真實」類型是「Object」,它不能轉換爲「int」。 –

1

您必須爲您的整數值添加強制轉換。你先前檢查過它們是否是整數,但是用句子表示

double valueCast1 = value1 * 1.0; 
double valueCast2 = value2 * 1.0; 

它們仍然是通用的E類。你必須指定它們應該被視爲整數,所以

double valueCast1 = (Integer)value1 * 1.0; 
double valueCast2 = (Integer)value2 * 1.0; 

就是這樣。

-1

相反乘以1,你應該能夠直接強制轉換它爲什麼要這樣寫代碼的兩倍

double valueCast1= (double)value1; 
double valueCast2 = (double)value2; 
+0

這在Java中不起作用,因爲靜態類型是'E'(在這種情況下的確是'Object'),而運行時類型是'Integer',並且這兩者都不能直接轉換爲'double'。 –

+0

我的不好。 Integer不能被直接轉換爲Java中的double類型。在Integer類中找到一個可以幫助 double valueCast1 =((Integer)(value1))的方法。的doubleValue(); double valueCast2 =((Integer)(value2))。的doubleValue(); – Tphil