как настроить метод на превращение в массив?

#java #arrays

#java #массивы

Вопрос:

У меня есть файл класса с именем serializedObject, я хотел бы вызвать этот файл класса в другом файле класса и использовать его метод.

Я хочу объявить файл класса become и array для использования в другом файле класса. Затем я объявляю что-то вроде приведенного ниже:

 serializedObject[] setData = new serializedObject[10];
  

и использовать его в цикле for

 for(int i=0; i<clientInfo.length; i  )
{

double locationX = clientInfo[i].getLocation().getX();
double locationY = clientInfo[i].getLocation().getY();
String name = clientInfo[i].getName();
double mood = clientInfo[i].getMood();
double hunger = clientInfo[i].getHunger();
double chargestate = clientInfo[i].getChargestate();

setData[i].setAll(locationX, locationY, name, mood, hunger, chargestate);
System.out.println(setData[i].getName());

}
  

В классе serializedObject у меня есть метод set, а также метод get,
но, похоже, для этого это не работает. Что я могу сделать вместо этого способа получения метода массива?
Спасибо за любой комментарий и помощь.

Похоже, что система действительно не может установить мое значение в метод, я не могу получить какое-либо значение из

 System.out.println(setData[i].getName());
  

но в системе нет никакой ошибки компиляции.

Здесь будет мой файл класса serializedObject

 public class serializedObject
{
    public static double locationX;
    public static double locationY;
    public static String name;
    public static double mood;
    public static double hunger;
    public static double chargestate;

    public serializedObject()
    {
    }


    public void setAll(double locationX,double locationY, String name,double mood,double hunger, double chargestate)
    {

        this.locationX = locationX;
        this.locationY = locationY;
        this.name = name;
        this.mood = mood;
        this.hunger = hunger;
        this.chargestate = chargestate;
    }

    public String getName()
    {
        return this.name;   
    }

    public double getLocationX()
    {
        return this.locationX;  
    }

    public double getLocationY()
    {
        return this.locationY;  
    }

    public double getMood()
    {
        return this.mood;   
    }

    public double getHunger()
    {
        return this.hunger; 
    }

    public double getChargestate()
    {
        return this.chargestate;    
    }
}
  

Комментарии:

1. Что вы пробовали для методов set / get? Почему они не сработали у вас? Было бы полезно, если бы вы показали методы, с которыми у вас возникли проблемы.

2. Что именно означает «не работает»? Вы получаете ошибку компиляции, исключение во время выполнения, неожиданный результат или …?

3. Функция setAll на самом деле не может установить значение, когда я пытаюсь вернуть значение, я ничего из этого не получаю. Точно так же, как игнорируется из системы, и нет никакой ошибки компиляции.

4. @vincent: Вам нужно привести нам полный пример (минимальный объем кода, который четко демонстрирует проблему). Очевидно, что мы не сможем сказать вам, почему ваш setAll метод не работает, если вы не покажете нам свой setAll метод.

5. @Mark Peters спасибо за комментарий, я обновил код здесь.

Ответ №1:

Обратите внимание, что это serializedObject[] setData = new serializedObject[10]; просто создаст массив. Все элементы по-прежнему имеют значение null, поэтому вызов методов для этих элементов (например getName() ) приведет к исключению NullPointerException. Сначала вам пришлось бы инициализировать элементы: setData [0] = new serializedObject(); затем вы вызываете методы call для элемента.

Комментарии:

1. Извините, не увидел вашего ответа!

Ответ №2:

Прежде всего, по соглашению, начальная буква имени класса должна быть заглавной как таковая, SerializedObject . В вашем цикле for вам нужно будет выполнить следующее:

 for(int i = 0; i < clientInfo.length; i  )
{
    // Construct new serialized object
    setData[i] = new SerializedObject();

    // Extract client information
    double locationX = clientInfo[i].getLocation().getX();
    double locationY = clientInfo[i].getLocation().getY();
    String name = clientInfo[i].getName();
    double mood = clientInfo[i].getMood();
    double hunger = clientInfo[i].getHunger();
    double chargestate = clientInfo[i].getChargestate();

    // Store information in serialized object
    setData[i].setAll(locationX, locationY, name, mood, hunger, chargestate);

    // Add serialized object to array
    System.out.println(setData[i].getName());

}
  

Примечание: На данный момент ваша программа должна выдавать исключение NullPointerException, которое должно было сообщить вам, что элементы внутри setData являются null .

Ответ №3:

 public static double locationX;
public static double locationY;
public static String name;
public static double mood;
public static double hunger;
public static double chargestate;
  

Все эти свойства являются статическими. Это означает, что они будут разделены между всеми экземплярами serializedObject. Следовательно, если вы сделаете это setAll в одном экземпляре, это, похоже, изменит все остальные экземпляры.

Вы должны сделать эти элементы экземпляра:

 public double locationX;
public double locationY;
public String name;
public double mood;
public double hunger;
public double chargestate;
  

Поля обычно не должны быть общедоступными, но это отдельное обсуждение.