Java 中, 是否有方法, 强制某 method 不接受 null 类型参数 ?
天蓬老师
天蓬老师 2017-04-18 10:34:33
0
2
476

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

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
PHPzhong

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.

巴扎黑

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...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal