提交 31a24720 编写于 作者: J Juergen Hoeller

Consistent support for EnumSet subclasses in CollectionFactory

Issue: SPR-17619
上级 7a7958f2
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -195,7 +195,7 @@ public final class CollectionFactory {
throw new IllegalArgumentException("Unsupported Collection interface: " + collectionType.getName());
}
}
else if (EnumSet.class == collectionType) {
else if (EnumSet.class.isAssignableFrom(collectionType)) {
Assert.notNull(elementType, "Cannot create EnumSet for unknown element type");
// Cast is necessary for compilation in Eclipse 4.4.1.
return (Collection<E>) EnumSet.noneOf(asEnumType(elementType));
......
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -35,11 +35,11 @@ import java.util.TreeMap;
import java.util.TreeSet;
import org.junit.Test;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.springframework.core.CollectionFactory.*;
......@@ -104,7 +104,7 @@ public class CollectionFactoryTests {
* {@link CollectionFactory#createApproximateMap(Object, int)}
* is not type-safe.
* <p>The reasoning is similar that described in
* {@link #createApproximateCollectionIsNotTypeSafe()}.
* {@link #createApproximateCollectionIsNotTypeSafeForEnumSet}.
*/
@Test
public void createApproximateMapIsNotTypeSafeForEnumMap() {
......@@ -242,6 +242,12 @@ public class CollectionFactoryTests {
assertThat(createCollection(EnumSet.class, Color.class, 0), is(instanceOf(EnumSet.class)));
}
@Test // SPR-17619
public void createsEnumSetSubclass() {
EnumSet<Color> enumSet = EnumSet.noneOf(Color.class);
assertThat(createCollection(enumSet.getClass(), Color.class, 0), is(instanceOf(enumSet.getClass())));
}
@Test(expected = IllegalArgumentException.class)
public void rejectsInvalidElementTypeForEnumSet() {
createCollection(EnumSet.class, Object.class, 0);
......@@ -297,7 +303,8 @@ public class CollectionFactoryTests {
}
static enum Color {
enum Color {
RED, BLUE;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册