Bonjour,

J'ai des avertissements Java sur une fonction statique un peu complexe niveau généricité.

La classe sert à valider des "entités" Hibernate grâce à la classe ClassValidator<Entity>(Entity.class) (qui doit être instanciée pour chaque entité). Or, pour ne pas avoir à créer le ClassValidator à chaque fois, je gère un cache.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public final class DomainValidator {
 
	/** Validators cache (for each Entity class name) */
	private static final Map<String, ClassValidator<? extends AbstractEntity>> VALIDATORS = new TreeMap<String, ClassValidator<? extends AbstractEntity>>();
 
	/** Get the Entity validator in the cache, or create it if it does not already exist */
	private static <Entity extends AbstractEntity> ClassValidator<Entity> getValidator(Entity entity) {
		Class<Entity> clazz = (Class<Entity>) entity.getClass(); // Avertissement 1
		String className = clazz.getName();
		ClassValidator<Entity> validator = null;
		synchronized (VALIDATORS) {
			validator = (ClassValidator<Entity>) VALIDATORS.get(className); // Avertissement 2
			if (validator == null) {
				validator = new ClassValidator<Entity>(clazz);
				VALIDATORS.put(className, validator);
			}
		}
		return validator;
	}
 
	/** Validate an Entity */
	public static <Entity extends AbstractEntity> Collection<InvalidValue> validate(Entity entity, String... properties) {
		// ...
	}
 
	private DomainValidator() {
		//
	}
}
  • Avertissement 1 : Type safety: Unchecked cast from Class<capture#1-of ? extends AbstractEntity> to Class<Entity>
  • Avertissement 2 : Type safety: Unchecked cast from ClassValidator<capture#2-of ? extends AbstractEntity> to ClassValidator<Entity>

Comment ce code peut-il être amélioré ?

Merci.