0

反射を使用してこれを減らす方法

private static Object determineDataType(final String value, String dataType)
{
    System.out.println("Name--->>" + dataType);
    if(dataType.equals(Boolean.class.getName()))
    {
       return new Boolean(value);
    }
    else if(dataType.equals(String.class.getName()))
    {
        return new String(value);
    }
    else if(dataType.equals(Character.class.getName()))
    {
        return new String(value);
    }
    else if(dataType.equals(Byte.class.getName()))
    {
        return new Byte(value);
    }
    else if(dataType.equals(Short.class.getName()))
    {
        return new Short(value);
    }
    else if(dataType.equals(Integer.class.getName()))
    {
        return new Integer(value);
    }
    else if(dataType.equals(Long.class.getName()))
    {
        return new Long(value);
    }
    else if(dataType.equals(Float.class.getName()))
    {
        return  new Float(value);
    }
    else if(dataType.equals(Double.class.getName()))
    {
        return  new Double(value);
    }
    //defualt return the String value, Lets' AOPI do the Validation
    return new String(value);
}
4

3 に答える 3

1

私も、なぜあなたはこんなことをするのだろうと思います。しかし、それはさておき、テストされていないコードは次のとおりです。

List<Class<?>> types = Arrays.asList(Long.class, Integer.class, ... );
for (Class<?> type : types) {
    if (type.getName().equals(dataType))
        return type.getConstructor(String.class).newInstance(value);
    // TODO: catch exceptions and probably re-throw wrapped
}
return new String(value);
于 2012-06-05T10:40:17.947 に答える
1

Class.forNameとメソッドを使用できますgetConstructor(ここに例を示します)。

Object instance = Class.forName(dataType)
         .getConstructor(new Class[] {String.class})
         .newInstance(new Object[]{value});

ちなみに、Character と Boolean には特別な処理を行うため、機能しません。

于 2012-06-05T10:47:40.573 に答える
0

ここでリフレクションを使用してコードの量を減らすことはできないと思います。まず、リフレクション API は非常に冗長です。第 2 に、いくつかのブロックで少し異なることを行っています。特に、Boolean のブロックは、コンストラクターを呼び出すだけではありません。

于 2012-06-05T10:50:29.270 に答える