比方說,我有這樣的方法:泛型方法不帶參數
static class Example
{
public static <N extends Number> Number getOddBits(N type)
{
if (type instanceof Byte) return (byte)0xAA;
else if (type instanceof Short) return (short)0xAAAA;
else if (type instanceof Integer) return 0xAAAAAAAA;
else if (type instanceof Float) return Float.intBitsToFloat(0xAAAAAAAA);
else if (type instanceof Long) return 0xAAAAAAAAAAAAAAAAL;
else if (type instanceof Double) return Double.longBitsToDouble(0xAAAAAAAAAAAAAAAAL);
throw new IllegalArgumentException();
}
}
該方法的實際細節是不是真的很重要。然而,調用這個方法,我們使用:
Example.<Float>getOddBits(0f);
我的問題是,是否有可能寫出這樣的方法沒有常規參數。沒有超載,並最終沒有拳擊。
Example.<Byte>getOddBits();
我想沒有,因爲刪除的,但你可以擺脫superflous實例參數,並使用一個類對象作爲參數:'getOddBits(類clazz中<擴展號碼?>)'。我不認爲你可以避開拳擊,因爲返回類型不足以創建不同的簽名,即'byte getOddBits()'和'int getOddBits()'可能是模糊的。 – Pyranja
也可能有其他選項。你爲什麼需要這樣做?對於你的例子,基本上靜態值被返回,你可以使用枚舉。如果有更具體的東西,也可以有其他選擇。例如,如果要將數字轉換爲另一種形式,則可以使用toBytes和fromBytes方法創建轉換接口。然後有你需要的任何類來實現它。林不知道這是否有幫助,如果不是,你可以給出一個更具體的例子更接近你需要它做什麼? –
@JohnKane這個例子是任意的,只是爲了演示如何以儘可能最小的方式通過參數指定子類的返回類型。我可能本來可以用舊的「foo-bar-baz」,但我認爲一個實際的例子會更適合。 – azz