class AbstractAtomicFieldUpdaterAssert<SELF extends AbstractAtomicFieldUpdaterAssert<SELF, VALUE, ATOMIC, OBJECT>, VALUE, ATOMIC, OBJECT>
    extends AbstractObjectAssert<SELF, ATOMIC> {

  private final boolean expectedNullAllowed;

  protected AbstractAtomicFieldUpdaterAssert(ATOMIC actual, Class<?> selfType, boolean expectedNullAllowed) {
    super(actual, selfType);
    this.expectedNullAllowed = expectedNullAllowed;
  }

  public SELF hasValue(VALUE expectedValue, final OBJECT obj) {<FILL_FUNCTION_BODY>}

  protected abstract VALUE getActualValue(OBJECT obj);

  protected void validate(VALUE expectedValue) {
    isNotNull();
    if (!expectedNullAllowed) {
      checkNotNull(expectedValue);
    }
  }

  private void checkNotNull(VALUE expectedValue) {
    checkArgument(expectedValue != null, "The expected value should not be <null>.");
  }

}

    validate(expectedValue);
    VALUE actualValue = getActualValue(obj);
    if (!objects.getComparisonStrategy().areEqual(actualValue, expectedValue)) {
      throwAssertionError(shouldHaveValue(actual, actualValue, expectedValue, obj));
    }
    return myself;
  
<methods>public void <init>(ATOMIC, Class<?>) ,public SELF as(org.assertj.core.description.Description) ,public transient SELF as(java.lang.String, java.lang.Object[]) ,public SELF doesNotReturn(T, Function<ATOMIC,T>) ,public transient AbstractListAssert<?,List<?>,java.lang.Object,ObjectAssert<java.lang.Object>> extracting(java.lang.String[]) ,public AbstractObjectAssert<?,?> extracting(java.lang.String) ,public ASSERT extracting(java.lang.String, InstanceOfAssertFactory<?,ASSERT>) ,public final transient AbstractListAssert<?,List<?>,java.lang.Object,ObjectAssert<java.lang.Object>> extracting(Function<? super ATOMIC,?>[]) ,public AbstractObjectAssert<?,T> extracting(Function<? super ATOMIC,T>) ,public ASSERT extracting(Function<? super ATOMIC,T>, InstanceOfAssertFactory<?,ASSERT>) ,public SELF hasAllNullFieldsOrProperties() ,public transient SELF hasAllNullFieldsOrPropertiesExcept(java.lang.String[]) ,public SELF hasFieldOrProperty(java.lang.String) ,public SELF hasFieldOrPropertyWithValue(java.lang.String, java.lang.Object) ,public SELF hasNoNullFieldsOrProperties() ,public transient SELF hasNoNullFieldsOrPropertiesExcept(java.lang.String[]) ,public transient SELF hasOnlyFields(java.lang.String[]) ,public SELF isEqualToComparingFieldByField(java.lang.Object) ,public SELF isEqualToComparingFieldByFieldRecursively(java.lang.Object) ,public transient SELF isEqualToComparingOnlyGivenFields(java.lang.Object, java.lang.String[]) ,public transient SELF isEqualToIgnoringGivenFields(java.lang.Object, java.lang.String[]) ,public SELF isEqualToIgnoringNullFields(java.lang.Object) ,public SELF returns(T, Function<ATOMIC,T>) ,public transient SELF usingComparatorForFields(Comparator<T>, java.lang.String[]) ,public SELF usingComparatorForType(Comparator<? super T>, Class<T>) ,public org.assertj.core.api.RecursiveAssertionAssert usingRecursiveAssertion() ,public org.assertj.core.api.RecursiveAssertionAssert usingRecursiveAssertion(org.assertj.core.api.recursive.assertion.RecursiveAssertionConfiguration) ,public RecursiveComparisonAssert<?> usingRecursiveComparison() ,public RecursiveComparisonAssert<?> usingRecursiveComparison(org.assertj.core.api.recursive.comparison.RecursiveComparisonConfiguration) <variables>private Map<java.lang.String,Comparator<?>> comparatorsByPropertyOrField,private org.assertj.core.internal.TypeComparators comparatorsByType