Java中的Class.getArrayType?
我使用以下技巧来获取特定类的数组类型:
@SuppressWarnings("unchecked") public static Class getArrayType(Class componentType) { String arrayClassName = "[L" + componentType.getName() + ";"; try { return (Class) Class.forName(arrayClassName); } catch (ClassNotFoundException e) { throw new UnexpectedException("Can't get the array type for " + componentType, e); } }
但是,有没有更优雅的方式来获得这个?
也许使用Array.newInstance() ,它返回给定类型的数组。
做类似的事情:
return Array.newInstance(someClass, 0).getClass()
可能会得到你想要的东西。
希望有所帮助。
我会像Zach L那样做,但记住结果:
import java.lang.reflect.Array; import java.util.concurrent.ConcurrentMap; import com.google.common.base.Function; import com.google.common.collect.MapMaker; // ... static Function, Class>> TO_ARRAY_FUNC = new Function, Class>>() { @Override public Class> apply(Class> from) { return Array.newInstance(from, 0).getClass(); } }; static ConcurrentMap, Class>> ARRAY_TYPE_MAP = new MapMaker().weakKeys() .weakValues() .makeComputingMap(TO_ARRAY_FUNC); @SuppressWarnings("unchecked") public static Class getArrayType(Class componentType) { return (Class) ARRAY_TYPE_MAP.get(componentType); }
尝试这个:
@SuppressWarnings({"unchecked"}) public static Class getArrayType(Class componentType) { return (Class) Array.newInstance(componentType, 1).getClass(); }
你无法逃避警告,但它越来越短。