2015-06-03 99 views
2

也許我只是在我的突觸結...自動裝箱0到通用號碼

public static <T extends Number> T firstNonZero(T... values) { 
    for (T value : values) { 
     if (value.doubleValue() != 0.0) { 
     return value; 
     } 
    } 
    return (T) 0;  // Cannot cast from int to T 
    } 

我想我不需要解釋上述方法。我的問題是我需要「生成」T類型的零。

我該怎麼做?

+0

返回NULL,而不是 – Shail016

+0

回報Integer.class.cast(0) –

+2

應該不叫方法'firstNonZero'如果找不到非零值,而不是零,甚至引發異常,真的返回'null'? –

回答

5

那麼,如何:

public static <T extends Number> T firstNonZero(T... values) { 
    T zero = null; 
    for (T value : values) { 
     if (value.doubleValue() != 0.0) { 
     return value; 
     } else { 
     zero = value; 
     } 
    } 
    return zero; 
    } 

這是假設至少一個值傳遞給方法。

0

如何:

public static <T extends Number> T firstNonZero(T... values) { 
     for (T value : values) { 
      if (value.doubleValue() != 0.0) { 
      return value; 
      } 
     } 
     return (T)Integer.class.cast(0);  // Double class can do too but give 0.0 if double or we will have ClassCastException 
     } 

也爲0號參數將在這種情況下工作

+1

我不認爲這會起作用。嘗試用'double d = firstNonZero(0.0);'如果你把它改成'Double.class.cast',試着用'int d = firstNonZero(0);' –

+0

@tobias_k不,它不會失敗, = firstNonZero(0.0);正如我剛剛嘗試過的,關於你關於Double.class.cast的第二個查詢,我更新了答案註釋'Double類也可以做,但如果double' –

+1

失敗,則返回0.0'assertEquals(new Long(0),NumberUtilities.firstNonZero(0L) );' – sjngm