class AbstractSpecification2 implements Specification2 {

    @Override
    public TranslatableString satisfiesTranslatable(final Object obj) {
        if (obj == null) {
            return nullability == Nullability.IGNORE_IF_NULL
                    ? null
                            : TranslatableString.tr("Cannot be null");
        }
        if (!expectedType.isInstance(obj)) {
            return typeChecking == TypeChecking.IGNORE_INCORRECT_TYPE
                    ? null
                            : TranslatableString.tr("Incorrect type");
        }
        final T objAsT = _Casts.uncheckedCast(obj);
        return satisfiesTranslatableSafely(objAsT);

    }

    protected  AbstractSpecification2();
    protected  AbstractSpecification2(final Nullability nullability, final TypeChecking typeChecking);

}