由于您只处理原语(和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