nullpointerexception عند إنشاء مجموعة من الكائنات [مكررة

StackOverflow https://stackoverflow.com/questions/1922677

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لقد كنت أحاول إنشاء مجموعة من الفئة التي تحتوي على قيمتين ولكن عندما أحاول تطبيق قيمة إلى الصفيف أحصل على nullpointerException.

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {}
}

.

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];
        boll[0].name = "iiii";
    }
}

لماذا أحصل على هذا الخطأ وكيف يمكنني إصلاحه؟

هل كانت مفيدة؟

المحلول

قمت بإنشاء الصفيف ولكن لم يضع أي شيء فيه، لذلك لديك صفيف يحتوي على 5 عناصر، كلها فارغة. يمكنك إضافة.

boll[0] = new ResultList();

قبل السطر حيث قمت بتعيين BOLL [0] .NAME.

نصائح أخرى

ResultList[] boll = new ResultList[5];

ينشئ مجموعة من الحجم = 5، ولكن لا ينشئ عناصر الصفيف.

يجب عليك إنشاء إنشاء كل عنصر.

for(int i=0; i< boll.length;i++)
    boll[i] = new ResultList();

أعتقد عن طريق الاتصال

 ResultList[] boll = new ResultList[5];

قمت بإنشاء قائمة يمكن أن تعقد 5 قواعد، وأعتقد أن عليك تهيئة BOLL [0] قبل تعيين القيمة.

boll[0] = new ResultList();

كما قال الكثيريون في الإجابات السابقة، ResultList[] boll = new ResultList[5]; ما عليك سوى إنشاء مجموعة من الناتجة التي تحتوي على حجم 5 حيث تكون جميع العناصر فارغة. عندما تستخدم boll[0].name, ، أنت تحاول أن تفعل شيئا مثل null.name وهذا هو سبب nullpointerException. استخدم التعليمات البرمجية التالية:

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];

        for (int i = 0; i < boll.length; i++) {
            boll[i] = new ResultList();
        }

        boll[0].name = "iiii";
   } 
}

هنا لنوبته تهيئة كل عنصر في الصفيف مع ResultList كائن، وبمجرد اكتمال الحلقة، يمكنك استخدام

boll[0].name = "iiii";

علاوة على ذلك، يمكنك إثبات هذا بنفسك بإضافة خط تصحيح إلى صفك، مثل:

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {
        System.out.println("Creating Class ResultList");
    }
}

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

ResultList[] boll = new ResultList[5]; 

خلقت حقا 5 كائنات جديدة، سترى تظهر خط التصحيح الخاص بك على وحدة التحكم 5 مرات. إذا لم يكن الأمر كذلك، فأنت تعلم أن المنشئ لا يسمى. لاحظ أيضا أن السطر أعلاه لا يحتوي على قائمة معلمة مع أقواس مفتوحة ومثبتة "()" لذلك فهي ليست مكالمة دالة - أو مكالمة منشئتها. بدلا من ذلك، نحن نشير فقط إلى النوع. نحن نقول: "أحتاج إلى مساحة للحصول على صفيف من كائنات قائمة الناتج، ما يصل إلى 5 المجموع". بعد هذا الخط، كل ما لديك مساحة فارغة، وليس الكائنات.

أثناء محاولة الإصلاحات المختلفة، سيساعد خط التصحيح على تأكيد أنك تحصل على ما تريد.

ResultList p[] = new ResultList[2];

عن طريق كتابة هذا تخصيص مساحة فقط للحصول على صفيف من عناصرين. يجب عليك تهيئة المتغير المرجعي من خلال القيام بذلك:

for(int i = 0; i < 2; i++){
    p[i] = new ResultList();
 }
class ResultList {
    public String name;
    public Object value;
    public ResultList() {}
}
 public class Test {
    public static void main(String[] args){
    ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList(); //assign the ResultList objet to that index
    boll[0].name = "iiii";  
   System.out.println(boll[0].name);
   }
 }

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

بادئ ذي بدء، قمت بإنشاء عنصر 5 عناصر من نوع الناتج، ولكن عند إدراج القيمة التي تقوم بإدراج الاسم وقيمتها خطأ. يمكنك استخدام المنشئ لإنشاء وقيم إدراج عناصر الصفيف.

class ResultList {
    public String name;
    public Object value;
    public ResultList(String name,Object value){
        this.name = name;
        this.value = value;
        System.out.println(name+" --- "+value);
    }
}
public static void main(String[] args) {
        ResultList[] boll = new ResultList[5];
        boll[0] = new ResultList("myName","myValue");
    }

إما أن تجرب هذا السيناريو أو يمكنك إجراء ثابت "اسم" المتغير في فئة الناتج. لذلك عندما تكون قائمة الناتج [] BOOLL = LEGNT LONSTENT [5]؛ يتم تنفيذها في ذلك الوقت سوف يحصل جميع المتغير من تلك الفئة

public static void main(String[] args){
         ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList();
    boll[0].name = "iiii";

    System.out.println(boll[0].name);
    }


public class ResultList {

    public  static String name;
    public  Object value;

    public ResultList() {}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top