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

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

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

天蓬老师
天蓬老师

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

membalas semua(2)
PHPzhong

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.

巴扎黑

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.

Terdapat sebab tertentu mengapa NullPointerException ialah pengecualian masa jalan

Dengan mengandaikan Java menyokong sintaks sedemikian, gunakan anotasi: @NotNullTunjukkan 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.

Kemudian jadikan nilai pulangan bukan nol?

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan