无法从非@Nullable @Provides方法返回null

时间:2019-06-29 14:47:02

标签: java android null

我已经将//---- tokenize.h ---- #define TERMINAL 0 #define OPERAND 1 #define ERROR 2 #define ADD '+' #define SUBTRACT '-' #define MULTIPLY '*' #define DIVIDE '/' #define EXPONENT '^' #define L_PARENTHESIS '(' #define R_PARENTHESIS ')' #define SYNTAX_ERROR 1 #define PAREN_ERROR 2 typedef struct context { char *p; char *nextp; int parenthesis_balance; int error_code; double value; } context; int this_token(context *cp); void skip_token(context *cp); //---- tokenize.c ---- #include <stdlib.h> //#include "tokenize.h" int this_token(context *cp) { char *p = cp->p; for (;;) { switch (*p) { case '\0': cp->nextp = p; return TERMINAL; case ' ': case '\t': case '\n': /* ignore white space */ p++; continue; case ADD: case SUBTRACT: case MULTIPLY: case DIVIDE: case EXPONENT: case L_PARENTHESIS: case R_PARENTHESIS: /* single character operators */ cp->nextp = p + 1; return *p; default: /* try and parse as a number constant */ cp->value = strtod(p, &cp->nextp); if (cp->nextp > p) return OPERAND; return ERROR; } } } void skip_token(context *cp) { cp->p = cp->nextp; } //---- parse.h ---- int parse(char expression[], double *result); void solve(char expression[]); //---- parse.c ---- #include <stdio.h> #include <stdlib.h> #include <math.h> //#include "tokenize.h" //#include "parse.h" /* expression parsers return non zero upon error */ int try_add_sub(context *cp, double *result); int try_mul_div(context *cp, double *result); int try_exp(context *cp, double *result); int try_primary(context *cp, double *result); int try_add_sub(context *cp, double *result) { if (try_mul_div(cp, result)) return 1; for (;;) { double operand; switch (this_token(cp)) { case ADD: skip_token(cp); if (try_mul_div(cp, &operand)) return 1; *result += operand; continue; case SUBTRACT: skip_token(cp); if (try_mul_div(cp, &operand)) return 1; *result -= operand; continue; } return 0; } } int try_mul_div(context *cp, double *result) { if (try_exp(cp, result)) return 1; for (;;) { double operand; switch (this_token(cp)) { case MULTIPLY: skip_token(cp); if (try_exp(cp, &operand)) return 1; *result *= operand; continue; case DIVIDE: skip_token(cp); if (try_exp(cp, &operand)) return 1; *result /= operand; continue; } return 0; } } int try_exp(context *cp, double *result) { if (try_primary(cp, result)) return 1; if (this_token(cp) == EXPONENT) { double operand; skip_token(cp); if (try_exp(cp, &operand)) return 1; *result = pow(*result, operand); } return 0; } int try_primary(context *cp, double *result) { switch (this_token(cp)) { case OPERAND: skip_token(cp); *result = cp->value; return 0; case L_PARENTHESIS: skip_token(cp); cp->parenthesis_balance++; if (try_add_sub(cp, result)) return 1; cp->parenthesis_balance--; if (this_token(cp) != R_PARENTHESIS) { cp->error_code = PAREN_ERROR; return 1; } skip_token(cp); return 0; } cp->error_code = SYNTAX_ERROR; return 1; } /* parse and evaluate an expression, return error code, update result */ int parse(char expression[], double *result) { context cc; cc.nextp = cc.p = expression; cc.parenthesis_balance = 0; cc.error_code = 0; cc.value = 0; if (try_add_sub(&cc, result)) return cc.error_code; if (this_token(&cc) != TERMINAL) return SYNTAX_ERROR; return 0; } void solve(char expression[]) { double result = 0; switch (parse(expression, &result)) { case 0: printf(" %.17g\n", result); break; case SYNTAX_ERROR: printf("ERROR: Syntax\n"); break; case PAREN_ERROR: printf("ERROR: Unbalanced parenthesis\n"); break; } } //---- calculator.c ---- #include <stdio.h> #include <stdlib.h> #include <string.h> //#include "parse.h" int main(int argc, char **argv) { for (int i = 1; i < argc; i++) solve(argv[i]); if (argc == 1) { char user_in[1024]; char *p; printf("Terminal Calculator\n"); printf("Type 'exit' to terminate\n\n"); for (;;) { printf("=> "); if (!fgets(user_in, sizeof user_in, stdin)) { printf("\n"); break; } /* strip trailing newline */ user_in[strcspn(user_in, "\n")] = '\0'; /* skip initial white space */ p = user_in + strspn(user_in, " \t"); /* ignore empty and comment lines */ if (*p == '\0' || *p == '#') continue; /* trap exit command */ if (!strcmp(p, "exit")) break; solve(p); } } return 0; } 注入了我的班级:

clientProvider

但是我收到一条错误消息:

 @Inject
    public DepictDao(@Named("depicts") Provider<ContentProviderClient> clientProvider) {
        this.clientProvider = clientProvider;
    }

当我尝试致电

Cannot return null from a non-@Nullable @Provides method

0 个答案:

没有答案