#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 Не обязательно! Я не большой поклонник установщиков и геттеров и стараюсь в основном избегать их. Но иногда они вам нужны, и когда вы это делаете, им нравится быть общедоступными. Это проблема, которую можно решить, только изменив многое. например, дизайн иерархии ваших объектов. Я предлагаю забыть о наилучшей практике на данный момент и просто читать руководства и писать код, затем попытаться реорганизовать ваши старые коды с помощью новых шаблонов.