Rumah > Soal Jawab > teks badan
让某 method 明确声明: 我不接受 null 参数, 传了 null , 我马上崩溃 !
并且, 该抛错在编译阶段抛出, 不要跑到运行时去
PHPz2017-04-18 10:36:33
Sistem jenis Java tidak menyokongnya dan hanya boleh dilaksanakan melalui pemalam: Rangka Kerja Pemeriksa Untuk menambah anotasi, nyatakan pemalam semasa penyusunan.
Perkara di atas melaksanakan pengesanan nol pengkompil Bagi ranap jika nol dilalui, ini boleh dicapai dengan memasukkan kod semakan nol melalui pemalam.
巴扎黑2017-04-18 10:36:33
Soalan yang bagus Saya biasanya hanya menumpukan pada cara melaksanakan fungsi, tetapi saya tidak terlalu memikirkan mengapa Java tidak melaksanakannya dengan cara ini, seperti soalan ini. Ia juga menimbulkan banyak imaginasi liar dalam diri saya Alangkah baiknya jika sintaks Java disokong sekurang-kurangnya beberapa kali lebih tinggi, tetapi apabila saya memikirkannya semula, ada sesuatu yang tidak kena.
Dengan mengandaikan Java menyokong sintaks sedemikian, gunakan anotasi: @NotNull
Tunjukkan bahawa parameter tidak kosong
Senario seperti ini: selepas pengguna berjaya log masuk, masa log masuk dan IP pengguna dikemas kini.
Data pengguna termasuk:
name | password | lasttime | ip |
---|---|---|---|
aaa | 123456 | 2017-01-09 | 192.168.1.1 |
bbb | 123456 | 2017-01-08 | 192.168.1.1 |
Kemas kini kod pseudo maklumat pengguna:
public void updateAccount(@NotNull Account account) {
// 因为肯定不为空,可以放心大胆的更新Account的最新登录时间、ip
}
@NotNull
menunjukkan parameter: account
tidak boleh kosong, tiada masalah di sini.
Dapatkan kod pseudo log masuk pengesahan maklumat pengguna:
public Account login(String name) {
// 1、连接数据库
// 2、根据用户名获取Account
// 3、验证用户信息
// 4、验证成功返回Account信息,验证失败返回null
}
Kami hanya tidak mahu parameter kosong dan kami tidak mahu nilai pulangan kosong, jadi tiada masalah.
Kod pseudo penghakiman logik utama:
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);
}
Maka persoalannya, bolehkah parameter akaun dihantar ke kaedah service.updateAccount()
, dan bolehkah kompilasi itu lulus? Objek Accoount
yang dibaca daripada pangkalan data sememangnya merupakan objek yang samar-samar Ia mungkin mewakili orang tertentu atau mungkin null
.
Ya, ia boleh menjadi seperti ini menjadi corak yang dipanggil NullObject Pattern (NullObject Pattern) , yang bermaksud untuk mencipta objek kosong khusus untuk menyatakan bahawa hasilnya kosong.
Sila semak untuk butiran:
https://segmentfault.com/q/10...
http://www.cnblogs.com/haodaw...