"No nulo si la función devuelve un valor no nulo"?

Andy Turner:

Considere un método como ConcurrentHashMap's computemétodo:

public V compute(
             K key,
             BiFunction<? super K,? super V,? extends V>  remappingFunction)

Me gustaría anotar esto para la comprobación nulabilidad con el marco corrector:

public @Nullable V compute(
             K key,
             BiFunction<? super K, ? super @Nullable V, ? extends @Nullable V> remappingFunction);

pero esto no es del todo bien: me gustaría ser capaz de inferir que vuelva ? extends @NonNull Vcon el fin de evitar un cheque nulo en el caso en el que sé que los remappingFunctionnunca vuelve null, por ejemplo:

@NonNull V value = map.compute(key, (k, v) -> {
    if (v == null) {
        return new V();
    }
    v.increment();
    return v;
});

¿Es posible expresar que?

mernst:

El marco del inspector proporciona dos formas de escribir las especificaciones condicionales, donde un tipo depende de otros valores o tipos.

  • @PolyNullindica que dos tipos deben ser los mismos, pero tienen un tipo común podría ser @NonNullo @Nullable. Parece que esto le permitirá expresar la especificación deseada.
  • @EnsuresNonNullIf hace un tipo depende de valor de retorno de un método.

Ambos se describe en la sección nullness Anotaciones en el marco del inspector manual .

PD: Una vez que tenga una especificación mejorada, se puede presentar como una solicitud de extracción para actualizar el JDK anotada que se entrega con el Marco del inspector.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192623&siteId=1
Recomendado
Clasificación