Java: вызов экземпляра средства получения из другого класса возвращает null

#java #getter

#java #средство получения

Вопрос:

Я новичок в Java и хочу улучшить свои навыки ООП. Поэтому я стараюсь писать все мои «первые программы» объектно-ориентированными.

В любом случае… Я запустил небольшую программу тестирования примитивов:

 public class Primitives {

byte b;

private void setByte (byte b)
{
    this.b = b;
}
public byte getByte() 
{
    return b;
}


short s;

private void setShort (short s)
{
    this.s = s;
}
public short getShort() 
{
    return s;
}


int i;

private void setInteger (int i)
{
    this.i = i;
}
public int getInteger() 
{
    return i;
}


long l;

private void setLong (long l)
{
    this.l = l;
}
public long getLong() 
{
    return l;
}


float f;

private void setFloat (float f)
{
    this.f = f;
}
public float getfloat() 
{
    return f;
}



double d;

private void setDouble (double d)
{
    this.d = d;
}
public double getDouble()
{
    return d;
}


boolean bool;

private void setBoolean (boolean bool)
{
    this.bool = bool;
}
public boolean getBoolean() 
{
    return bool;
}


char c;

private void setChar (char c)
{
    this.c = c;
}
public char getChar() 
{
    return c;
}


String str;

private void setString (String str)
{
    this.str = str;
}
public String getString()
{
    return str;
}


public static void main(String[] args) {

    Primitives prim = new Primitives();
    prim.setBoolean(true);
    //prim.setByte(42);
    //prim.setChar("ft");
    prim.setDouble(42.42);
    //prim.setFloat(42);
    prim.setInteger(42);
    prim.setLong(424242);
    //prim.setShort(0);
    prim.setString("fourtytwo");

    //System.out.println(integer.getInteger());
}
  

}

После этого я пытаюсь вызвать мои средства получения в другом классе «Main»:

 public class Main {

public static void main(String[] args) 
{
    Primitives object = new Primitives();

    int objectInt = object.getInteger();
    String objectString = object.getString();

    System.out.println(objectInt);
    System.out.println(objectString);
}       
  

}

Мой вывод таков

 0
null
  

Как это происходит?
Я имею в виду, я создавал экземпляр (например, getInt) раньше, почему я получил 0?

Я знаю, что здесь должно быть 1000 ответов, но я не смог найти ни одного правильного.

Другой вопрос: почему я получаю «Метод setByte (байт) в примитивах типа неприменим для аргументов (int)» в моем установщике? (вот почему я комментирую некоторые типы)

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

1. Какое еще значение вы ожидаете получить, кроме 0 и null ? Это не похоже на то, что вы вызывали какой-либо метод установки в вашем main() методе вашего Main класса.

2. извините, я новичок… я записал свои средства получения и установки в свой класс primitive и установил свои значения в main. В классе Main я хотел вызвать свои примитивы, которые я настроил ранее

Ответ №1:

Вы должны вызвать методы установки и установить значение, прежде чем вы их получите.

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

1. Я попытался поместить мои блочные примитивы prim = new Primitives(); prim.setInteger(42); перед моим основным в классе Primitives… Не удалось с этим справиться (Eclispe написал что-то об отсутствующем @)

Ответ №2:

Проблема с вашим кодом заключается в том, что у вас есть два main класса, и похоже, что вы запускаете тот из Main класса, который не инициирует вашу переменную.

Другой main метод внутри вашего Primitives класса никогда не выполняется, поэтому вы фактически не инициировали свои переменные!

У каждого приложения должен быть один main класс, и только один

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

1. @milz_miliz Итак, почему вы сделали их закрытыми, когда собираетесь вызывать их в другом классе?!

2. Я читал, что установщики должны быть частными. Я хочу настроить его в примитивах и вызывать из (почти) любого другого места

3. @milz_miliz Не обязательно! Я не большой поклонник установщиков и геттеров и стараюсь в основном избегать их. Но иногда они вам нужны, и когда вы это делаете, им нравится быть общедоступными. Это проблема, которую можно решить, только изменив многое. например, дизайн иерархии ваших объектов. Я предлагаю забыть о наилучшей практике на данный момент и просто читать руководства и писать код, затем попытаться реорганизовать ваши старые коды с помощью новых шаблонов.