मैं निम्नलिखित BeanValidation कोड है कि ठीक काम करता है, और परमिट मान्य करने के लिए है कि एक सेम के साथ एनोटेट है:जेनिक्स और कक्षा <? Enum <?>>, EnumSet.allOf (वर्ग) class.getEnumConstants बनाम() फैली हुई है
@EnumValue(enumClass = MyTestEnum.class)
private String field;
public enum MyTestEnum {
VAL1, VAL2;
}
तभी सत्यापित किया जाएगा यदि फ़ील्ड मान "VAL1" या "VAL2" है।
public class EnumNameValidator implements ConstraintValidator<EnumValue, String> {
private Set<String> AVAILABLE_ENUM_NAMES;
@Override
public void initialize(EnumValue enumValue) {
Class<? extends Enum<?>> enumSelected = enumValue.enumClass();
Set<? extends Enum<?>> enumInstances = Sets.newHashSet(enumSelected.getEnumConstants());
AVAILABLE_ENUM_NAMES = FluentIterable
.from(enumInstances)
.transform(PrimitiveGuavaFunctions.ENUM_TO_NAME)
.toImmutableSet();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
} else {
return AVAILABLE_ENUM_NAMES.contains(value);
}
}
}
मुझे समझ में नहीं आता कि मेरा पहला प्रयास क्यों विफल रहा। निम्नलिखित कोड ऊपर enumSelected.getEnumConstants()
के बजाय का उपयोग करना:
Set<? extends Enum<?>> enumInstances = EnumSet.allOf(enumSelected);
Intellij 12 किसी भी त्रुटि को उजागर नहीं करता, लेकिन संकलक का कहना है:
java: method allOf in class java.util.EnumSet<E> cannot be applied to given types;
required: java.lang.Class<E>
found: java.lang.Class<capture#1 of ? extends java.lang.Enum<?>>
reason: inferred type does not conform to declared bound(s)
inferred: capture#1 of ? extends java.lang.Enum<?>
bound(s): java.lang.Enum<capture#1 of ? extends java.lang.Enum<?>>
मैं समस्या समझ में नहीं आता है, और मैं भी है कि कोड है जो ठीक काम करता है है:
private static <T extends Enum<T> & EnumAlternativeName> T safeGetByAlternativeName(Class<T> enumClass, String alternativeName) {
for (T t : EnumSet.allOf(enumClass)) {
if (t.getAlternativeName().equals(alternativeName)) {
return t;
}
}
return null;
}
संबंधित टिकट: http://stackoverflow.com/questions/5548091/problem-when-trying-to-use-generics –
यह भी एक: http://stackoverflow.com/questions/3546745/multiple-wildcards-on- एक-सामान्य-मीटर ethods-makes-java-compiler-and-me-very-confu – assylias
@ क्रिस्टोफ्रॉउसी: टिकट? StackOverflow अब एक समर्थन प्रणाली है :) – mellamokb