diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/FastList.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/FastList.java index 93520c22..3eee58fa 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/FastList.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/FastList.java @@ -25,6 +25,7 @@ import java.lang.reflect.Array; */ public final class FastList { + private final Class clazz; private T[] elementData; private int size; @@ -36,6 +37,7 @@ public final class FastList public FastList(Class clazz) { this.elementData = (T[]) Array.newInstance(clazz, 32); + this.clazz = clazz; } /** @@ -47,6 +49,7 @@ public final class FastList public FastList(Class clazz, int capacity) { this.elementData = (T[]) Array.newInstance(clazz, capacity); + this.clazz = clazz; } /** @@ -64,7 +67,7 @@ public final class FastList final int oldCapacity = elementData.length; final int newCapacity = oldCapacity << 1; @SuppressWarnings("unchecked") - final T[] newElementData = (T[]) Array.newInstance(element.getClass(), newCapacity); + final T[] newElementData = (T[]) Array.newInstance(clazz, newCapacity); System.arraycopy(elementData, 0, newElementData, 0, oldCapacity); newElementData[size - 1] = element; elementData = newElementData; diff --git a/hikaricp-java6/src/test/java/com/zaxxer/hikari/TestFastList.java b/hikaricp-java6/src/test/java/com/zaxxer/hikari/TestFastList.java index 3be6b00f..0a6dc91b 100644 --- a/hikaricp-java6/src/test/java/com/zaxxer/hikari/TestFastList.java +++ b/hikaricp-java6/src/test/java/com/zaxxer/hikari/TestFastList.java @@ -74,4 +74,31 @@ public class TestFastList Assert.assertSame(verifyList.get(i), list.get(i)); } } + + @Test + public void testPolyMorphism1() + { + class Foo implements Base2 { + + } + + class Bar extends Foo { + + } + + FastList list = new FastList<>(Base.class, 2); + list.add(new Foo()); + list.add(new Foo()); + list.add(new Bar()); + } + + interface Base + { + + } + + interface Base2 extends Base + { + + } } diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/FastList.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/FastList.java index 93520c22..3eee58fa 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/FastList.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/FastList.java @@ -25,6 +25,7 @@ import java.lang.reflect.Array; */ public final class FastList { + private final Class clazz; private T[] elementData; private int size; @@ -36,6 +37,7 @@ public final class FastList public FastList(Class clazz) { this.elementData = (T[]) Array.newInstance(clazz, 32); + this.clazz = clazz; } /** @@ -47,6 +49,7 @@ public final class FastList public FastList(Class clazz, int capacity) { this.elementData = (T[]) Array.newInstance(clazz, capacity); + this.clazz = clazz; } /** @@ -64,7 +67,7 @@ public final class FastList final int oldCapacity = elementData.length; final int newCapacity = oldCapacity << 1; @SuppressWarnings("unchecked") - final T[] newElementData = (T[]) Array.newInstance(element.getClass(), newCapacity); + final T[] newElementData = (T[]) Array.newInstance(clazz, newCapacity); System.arraycopy(elementData, 0, newElementData, 0, oldCapacity); newElementData[size - 1] = element; elementData = newElementData; diff --git a/hikaricp/src/test/java/com/zaxxer/hikari/TestFastList.java b/hikaricp/src/test/java/com/zaxxer/hikari/TestFastList.java index 3be6b00f..0a6dc91b 100644 --- a/hikaricp/src/test/java/com/zaxxer/hikari/TestFastList.java +++ b/hikaricp/src/test/java/com/zaxxer/hikari/TestFastList.java @@ -74,4 +74,31 @@ public class TestFastList Assert.assertSame(verifyList.get(i), list.get(i)); } } + + @Test + public void testPolyMorphism1() + { + class Foo implements Base2 { + + } + + class Bar extends Foo { + + } + + FastList list = new FastList<>(Base.class, 2); + list.add(new Foo()); + list.add(new Foo()); + list.add(new Bar()); + } + + interface Base + { + + } + + interface Base2 extends Base + { + + } }