由于您只使用原语(和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);
}
}
您当然可以为其他组合添加更多类和工厂方法。
我想创建一个抽象的PrimitivePair 类,该类将具有getFirstValue() 和getSecondValue() 方法的创建方法和 方法声明,但这需要返回类型协方差起作用对于原始人,我不相信它。