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(); } 

你无法逃避警告,但它越来越短。