Maison > Questions et réponses > le corps du texte
让某 method 明确声明: 我不接受 null 参数, 传了 null , 我马上崩溃 !
并且, 该抛错在编译阶段抛出, 不要跑到运行时去
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.
巴扎黑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.
En supposant que Java prenne en charge une telle syntaxe, utilisez l'annotation : @NotNull
Indiquez 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
.
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...