あなたは Map< String, Primitive type > が欲しいと言います。
JLSによって指定された、プリミティブはNumericTypeまたはboolean
、NumericTypeはIntegralTypeまたはFloatingPointTypeです。
プリミティブではなくNumericTypeのみが必要な場合は、次を使用できますjava.lang.Number
。
Map< String, Number >
もう 1 つの方法は、考えられるすべての属性を保持するクラス Any を定義することです。
enum Type {
NULL,
INTEGER,
SHORT,
FLOAT,
...
}
class Any {
private int iValue;
private short sValue;
private float fValue;
...
private Type active = Type.NULL;
public void setInt( int value ) {
iValue = value;
active = Type.INTEGER;
}
public void setFloat( float value ) {
fValue = value;
active = Type.FLOAT;
}
...
public int getInt() {
if( type != Type.INTEGER ) {
throw new ClassCastException( type.name() + " is not an integer" );
}
return iValue;
}
...
}
がホルダーgetInt()
で呼び出された場合、チェックを入れて例外をスローするのはあなた次第です。float
たとえば、C言語のようなトランスタイプなど、すべてが可能です。
編集
String も必要ですが、String はプリミティブではありません。
以下private short sValue;
をAny
クラスに追加する必要があります。
private String sValue;
そして以下のfollowinginfSHORT,
をType
列挙型に:
STRING,
しかし、他の人が言うように、最善の方法は、これらの弱いタイプ (フランス語で fourre-tout) を避けることです。