由於您只處理原語(和String
),因此您似乎希望儘可能避免自動裝箱和取消裝箱。這意味着你不能使用泛型。 (原始類型不能用作類型參數。)它也好像你想避免不必要的促銷(例如,如果你將floats
作爲doubles
存儲,你會保留原始值,但失去了它實際上是一個事實float
)。
一個相當複雜的解決方案是創建一組PrimitivePair
類,其中一個用於要存儲的基本類型的每種組合,以及一個用於輕鬆構建它們的工廠類。例如,您可能有以下三種類型來存儲基元的各種對:
package primitivepair;
public class PrimitivePairStringInt
{
final String s;
final int i;
PrimitivePairStringInt(final String s, final int i)
{
this.s = s;
this.i = i;
}
public String getFirstValue()
{
return s;
}
public int getSecondValue()
{
return i;
}
}
package primitivepair;
public class PrimitivePairFloatDouble
{
final float f;
final double d;
PrimitivePairFloatDouble(final float f, final double d)
{
this.f = f;
this.d = d;
}
public float getFirstValue()
{
return f;
}
public double getSecondValue()
{
return d;
}
}
package primitivepair;
public class PrimitivePairCharByte
{
final char c;
final byte b;
PrimitivePairCharByte(final char c, final byte b)
{
this.c = c;
this.b = b;
}
public char getFirstValue()
{
return c;
}
public byte getSecondValue()
{
return b;
}
}
他們將通過下面的工廠類來創建:
package primitivepair;
public class PrimitivePairFactory
{
public static PrimitivePairCharByte createPrimitivePair(final char c, final byte b)
{
return new PrimitivePairCharByte(c, b);
}
public static PrimitivePairFloatDouble createPrimitivePair(final float f, final double d)
{
return new PrimitivePairFloatDouble(f, d);
}
public static PrimitivePairStringInt createPrimitivePair(final String s, final int i)
{
return new PrimitivePairStringInt(s, i);
}
}
您當然可以添加更多班級和工廠m其他組合的方法。
我想作一個抽象類PrimitivePair
,將有對getFirstValue()
和getSecondValue()
方法創建方法和方法聲明,但會要求返回類型的協方差適用於原語,我不相信確實。
你是什麼意思「所有類型」?所有基元類型+字符串(int,布爾值,短小,浮點等等)還是所有對象? – ParkerHalo
Nop只是原始類型 –
全部是對象 – Typo