recherche

Maison  >  Questions et réponses  >  le corps du texte

Java 中, 是否有方法, 强制某 method 不接受 null 类型参数 ?

让某 method 明确声明: 我不接受 null 参数, 传了 null , 我马上崩溃 !

并且, 该抛错在编译阶段抛出, 不要跑到运行时去

天蓬老师天蓬老师2888 Il y a quelques jours482

répondre à tous(2)je répondrai

  • PHPz

    PHPz2017-04-18 10:36:33

    Le système de types de Java ne le prend pas en charge et ne peut être implémenté que via des plug-ins : Checker Framework Pour ajouter des annotations, spécifiez le plug-in lors de la compilation.

    Ce qui précède implémente la détection de null par le compilateur. Quant au crash si null est passé, cela peut être réalisé en insérant un code de vérification null via un plug-in.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:36:33

    Bonne question. Je me concentre généralement uniquement sur la façon d'implémenter les fonctions, mais je n'ai pas beaucoup réfléchi aux raisons pour lesquelles Java ne les implémente pas de cette façon, comme cette question. Cela a également suscité beaucoup d'imagination en moi. Ce serait formidable si la syntaxe Java était prise en charge, l'efficacité du développement serait au moins plusieurs fois supérieure, mais quand j'y repense, quelque chose ne va pas.

    Il y a une certaine raison pour laquelle NullPointerException est une exception d'exécution

    En supposant que Java prenne en charge une telle syntaxe, utilisez l'annotation : @NotNullIndiquez que le paramètre n'est pas vide

    Un scénario comme celui-ci : une fois que l'utilisateur s'est connecté avec succès, l'heure de connexion et l'adresse IP de l'utilisateur sont mises à jour.

    Les données utilisateur comprennent :

    name password lasttime ip
    aaa 123456 2017-01-09 192.168.1.1
    bbb 123456 2017-01-08 192.168.1.1

    Mettre à jour le pseudo-code des informations utilisateur :

    public void updateAccount(@NotNull Account account) {
        // 因为肯定不为空,可以放心大胆的更新Account的最新登录时间、ip
    }

    @NotNull indique des paramètres : account ne peut pas être vide, il n'y a pas de problème ici.

    Obtenir le pseudo-code de connexion de vérification des informations utilisateur :

    public Account login(String name) {
        // 1、连接数据库
        // 2、根据用户名获取Account
        // 3、验证用户信息
        // 4、验证成功返回Account信息,验证失败返回null
    }

    Nous ne voulons tout simplement pas que les paramètres soient vides, et nous ne voulons pas que la valeur de retour soit vide, donc il n'y a pas de problème.

    Pseudo-code du jugement logique principal :

    public static void main(String[] args) {
        AccountService service = new AccountService();
        // aaa登录
        Account account = service.login("aaa","123456");
        service.updateAccount(account);
        
        // bbb登录
        Account account = service.login("bbb","123456");
        service.updateAccount(account);
        
        // ccc登录
        Account account = service.login("ccc","123456");
        service.updateAccount(account);
    }

    Alors la question est la suivante : le paramètre de compte peut-il être transmis à la méthode service.updateAccount() et la compilation peut-elle réussir ? L'objet Accoount lu dans la base de données est intrinsèquement un objet ambigu. Il peut représenter une certaine personne ou il peut s'agir de null.

    Alors rendre la valeur de retour non nulle ?

    Oui, cela peut être comme ça. Cela devient un modèle appelé NullObject Pattern (NullObject Pattern) , ce qui signifie créer un objet vide dédié pour représenter que le résultat est vide.

    Veuillez vérifier les détails :

    • https://segmentfault.com/q/10...

    • http://www.cnblogs.com/haodaw...

    répondre
    0
  • Annulerrépondre