Jdbi: Java 9 قائمة غير قابلة للتغيير Nullpointer

تم إنشاؤها على ١٣ أكتوبر ٢٠١٨  ·  12تعليقات  ·  مصدر: jdbi/jdbi

public final This defineList(String key, List<?> values) {
        if (values.isEmpty()) {
            throw new IllegalArgumentException(
                    getClass().getSimpleName() + ".defineList was called with an empty list.");
        }
        if (values.contains(null)) {
            throw new IllegalArgumentException(
                    getClass().getSimpleName() + ".defineList was called with a list containing null values.");
        }

        String value = values.stream()
                .map(Object::toString)
                .collect(joining(", "));

        return define(key, value);
}

يطرح values.contains(null) استثناء nullpointer إذا تم إنشاء القائمة باستخدام List.of() ، نظرًا لأن طريقة contains تنتج NullpointerException إذا تم ملؤها بـ null:

    <strong i="11">@Override</strong>
    public boolean contains(Object o) {
        for (E e : elements) {
            if (o.equals(e)) { // implicit nullcheck of o
                return true;
            }
        }
        return false;
    }

التعليق الأكثر فائدة

أنا أؤيد حلًا بديلًا في jdbi بعد ذلك ، لكن سيكون ذلك بنظرة غاضبة نحو jdk وتعليق على الكود يشرح أن الكود ذي الصلة في jdbi ليس له الحق في الوجود إذن ¯ \ _ (ツ) _ / ¯

ال 12 كومينتر

List.of () مستندات API تقول أنه سيتم طرح NPE لأي عناصر فارغة: https://docs.oracle.com/javase/9/docs/api/java/util/List.html#of -E-

qualidafial نعم هذا صحيح ، ولكن في حالة احتوائه ، ستلقي القائمة NPE إذا تم سؤالها عما إذا كانت تحتوي على قيمة خالية

هل تريد أن يتوقف Jdbi عن استدعاء يحتوي () لأن تطبيق واحد لا يحمي من null؟

هذا يبدو إلى حد كبير وكأنه قضية ليست Jdbi ، لما يستحقه رأيي. ليس خطأ jdbi أن القائمة تقرر رمي npe على العناصر الفارغة التي تحتوي عليها (لماذا يمكنك حتى الحصول على قيمة خالية فيها إذا كانت لا تحب القيم الخالية؟). يحتاج Jdbi إلى التحقق من القيم الخالية ، لذلك يفعل. مشكلتك تتعلق بتنفيذ القائمة التي قررت استخدامها.

TheRealMarnesqualidafial أوافق على أنها ليست مشكلة jdbi ، ولكن ليس من المرغوب فيه على الأقل دعم جميع أنواع القائمة التي يوفرها JCL ، سيكون الإصلاح هو القيام بذلك بشكل مشابه لتطبيق bindList ، مع تيار.

هذه القائمة التي تطرح npe على تحتوي على عندما تحتوي على عناصر فارغة (التي لا تزال مدرجًا في القائمة في المقام الأول) ولا ترمي هذا npe عند دفق العناصر (لأن المنطق) هو تطبيق jdk بجدية؟

أعني ، يجب على jdbi kinda أن يدعمها بعد ذلك ، لكن لا يمكنني أن ألتف حول مثل هذا الشيء في الواقع في jdk.

TheRealMarnes نعم إنه كذلك ، ولهذا السبب فتحت هذا العدد.

أنا أؤيد حلًا بديلًا في jdbi بعد ذلك ، لكن سيكون ذلك بنظرة غاضبة نحو jdk وتعليق على الكود يشرح أن الكود ذي الصلة في jdbi ليس له الحق في الوجود إذن ¯ \ _ (ツ) _ / ¯

سأفتح طلب سحب بعد ذلك

شكرا لتتبع هذا ، الجميع :)

TheRealMarnes لقد حصلت على خطأ هناك: طريقة المصنع List.of تخلق مثيلات List غير قابلة للتغيير والتي لا تسمح بالعناصر الفارغة.

Javadoc واضح في سلوك java.util.List#contains(java.lang.Object) :

Throws NullPointerException - if the specified element is null and this list does not permit null elements (optional)

لذا ، في رأيي ، هذا مصدر قلق من جانب Jdbi وليس مشكلة في JDK نفسها - اتخذ فريق JDK هذا القرار (لسبب ما) ويجب على الجميع الالتزام به.

نعم ، لقد لاحظت للتو أن العبارة الاختيارية throws كانت موجودة منذ Java 5.: nauseated_face:

ما زلت أعتقد أنه يكسر LSP لكنه في المواصفات لذلك سنتعامل معه

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات