diff --git a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/util/TypeReference.java b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/util/TypeReference.java index 6b4073b8..4cc3033f 100644 --- a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/util/TypeReference.java +++ b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/util/TypeReference.java @@ -69,9 +69,14 @@ static Class getRawType(Type type) { } static Class getArrayClass(Class componentType) { - // TODO(user): This is not the most efficient way to handle generic - // arrays, but is there another way to extract the array class in a - // non-hacky way (i.e. using String value class names- "[L...")? - return Array.newInstance(componentType, 0).getClass(); + try { + return Class.forName("[L" + componentType.getName() + ";"); + } catch (ClassNotFoundException e) { + try { + return Array.newInstance(componentType, 0).getClass(); + } catch (Exception ex) { + throw new IllegalArgumentException("Error getting array type. ", e); + } + } } } diff --git a/squirrel-foundation/src/test/java/org/squirrelframework/foundation/util/TypeReferenceTest.java b/squirrel-foundation/src/test/java/org/squirrelframework/foundation/util/TypeReferenceTest.java new file mode 100644 index 00000000..019de74f --- /dev/null +++ b/squirrel-foundation/src/test/java/org/squirrelframework/foundation/util/TypeReferenceTest.java @@ -0,0 +1,18 @@ +package org.squirrelframework.foundation.util; + +import com.google.common.reflect.TypeToken; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TypeReferenceTest { + + @Test + public void testArrayTypeDiscovery() { + TypeReference> typeReference = new TypeReference>() {}; + + assertEquals(typeReference.getType(), new TypeToken>() {}.getType()); + } +}