cari

Rumah  >  Soal Jawab  >  teks badan

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

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

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

天蓬老师天蓬老师2888 hari yang lalu483

membalas semua(2)saya akan balas

  • PHPz

    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.

    balas
    0
  • 巴扎黑

    巴扎黑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.

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

    balas
    0
  • Batalbalas