Установка значения объекта с помощью метода в основном классе? - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь установить конкретные значения объектов в массиве с помощью метода.

public class BankAccount
{
private String name;

//constructor
public BankAccount(String firstName, String LastName)
{

name = firstName + " " + lastName;

}

public String getName()
{
return name;
}

Выше мой класс BankAccount, и у меня есть другой класс с именем BankAccountList:

public class BankAccountList {
    public static void main(String args[]){

    BankAccount bankAccount[] = new BankAccount[2];

    bankAccount[1] = giveName("MR", "Travis");
    }

    public static void giveName (String firstName, lastName){

    }
}

Как мне установить имя объекта в BankAccount[1] как «Мистер Тревис» с помощью следующего метода giveName()?Я не знаю, что положить в giveName с данным параметром.Любые советы будут высоко оценены.

Ответы [ 5 ]

0 голосов
/ 19 октября 2018

Есть несколько вещей, о которых стоит упомянуть.

Прежде всего, кажется, что у вас нет полного понимания разницы между статическим и динамическим.Это понятно, поскольку мне даже сейчас было бы нелегко объяснить это легко, хотя я понимаю, как это работает.В вашем классе BankAccountList есть метод main, который запускается из статического стандартного метода main.Ваш bankAccount массив определен в этом основном методе, то есть он не существует во всем классе, только внутри работающего основного метода.

Затем вы хотите дать имя банковскому счету в списке.Здесь вы создали еще один статический метод, который ничего не знает о том, что находится внутри вашего основного метода, и он не содержит никакого объекта, которому могут быть переданы параметры.Другими словами, пустая функция, которая у вас есть, не может устанавливать какие-либо параметры для банковского счета, потому что в методе нет банковского счета.

Я бы рекомендовал сделать метод giveName динамическим (что означает просто удаление статического ключевого слова) и переместить метод в класс BankAccount.Тогда у вас будет эффективный метод get и set для name, который является динамическим, то есть он действителен для каждого экземпляра объекта класса.После этого можно сначала обратиться к объекту в массиве и напрямую вызвать метод giveName() для этого конкретного объекта, который установит имя:

public class BankAccount
{
    private String name;

//constructor
public BankAccount(String firstName, String LastName)
{

    name = firstName + " " + lastName;

}

public String getName()
{
    return name;
}

public void giveName (String firstName, String lastName){
    name = firstName + " " + lastName;
}

и:

public class BankAccountList {
    public static void main(String args[]){

        BankAccount bankAccount[] = new BankAccount[2];

        bankAccount[1].giveName("MR", "Travis");
    }
}

ОБНОВЛЕНИЕ:

Я заметил еще одну вещь.Строка, в которой вы создаете массив: BankAccount bankAccount [] = new BankAccount [2];

Это не создает заполненный массив, он создает пустой массив.другими словами, вы не создали список с банковскими счетами, вы создали список, который может содержать банковские счета.Сначала вам нужно будет создать банковский счет, прежде чем вы сможете дать ему имя.

BankAccount bankAccount[] = new BankAccount[2];
bankAccount[1] = new BankAccount("MR", "Travis");

Теперь у вашего конструктора уже есть параметры для присвоения имени учетной записи при ее создании.Так что теперь вам не нужен метод giveName.Если вы не хотите изменить это позже:

bankAccount[1].giveName("MRS", "Davis");
0 голосов
/ 19 октября 2018

Вам нужны set методы!

Добавьте это к классу BankAccount:

public void setName(String firstName, String lastName) {
            this.name = firstName + " " + lastName;
}

, поэтому вы должны вызывать setName вместо giveName.Например:

 bankAccount[1].setName(String firstName, String lastName)

Еще одна вещь, я предлагаю вам использовать метод set в конструкторе вашего объекта:

//constructor
public BankAccount(String firstName, String LastName)
{

   setName(String firstName, String lastName);

}
0 голосов
/ 19 октября 2018

Вы определили массив, который будет содержать BankAccount объектов, поэтому для добавления в него элементов с помощью функции giveName () вам необходимо изменить эту функцию какследующее:

public class BankAccountList {
    public static void main(String args[]){

    BankAccount bankAccount[] = new BankAccount[2];

    bankAccount[1] = giveName("MR", "Travis");
    }

    public static BankAccount giveName (String p_firstName,String p_lastName){
      return new BankAccount(p_firstName, p_lastName)
    }
}
0 голосов
/ 19 октября 2018

Ваш метод giveName должен возвращать тип BankAccount:

public static BankAccount giveName (String firstName, String lastName){
   return new BankAccount(firstName, lastName);
}

Редактировать :

Простое объявление new BankAccount[] не заполняет записи вмассив (который вы можете ожидать, основываясь на опыте работы с другими языками).Первоначально массив будет пустым, и его можно заполнить несколькими способами:

Внутри цикла вы можете:

  • Вызвать конструктор BankAccount напрямую
  • Делегируйте другому методу, который возвращает новый .collect(Collectors.toSet()) (как в примере выше)

Этот выбор, как и большинство программных решений, в основном является личным предпочтением.Для простого DTO с двумя строковыми полями делегирование другому методу может оказаться излишним.

Для более сложного DTO, требующего проверки, делегирование другому методу помогает инкапсулировать эту логику проверки в одном месте, которое легко тестируется.

0 голосов
/ 19 октября 2018

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

bankAccount[1] = new BankAccount("MR", "Travis");

Но, если вам действительно нужно сделать это с помощью метода giveName, выможет сделать это так:

// change signature to return `BankAccount` object
public static BankAccount giveName (String firstName, String lastName){
    return new BankAccount(firstName, lastName);
}

и назвать это так: bankAccount[1] = giveName("MR", "Travis");


Если вам нужно giveName, чтобы void в качестве типа возврата, то вынеобходимо передать массив, чтобы добавить BankAccount внутри метода и позицию, в которой он будет добавлен.Например:

// change in order to signature receive an array of `BankAccount`s and the position where it will be added
public static void giveName (String firstName, String lastName, BankAccount[] bankAccounts, int position) {
   bankAccounts[position] = new BankAccount(firstName, lastName);
}

, а затем назовите его так: giveName("MR", "Travis", bankAccount, 1);


Дополнительные примечания :

  • Помнитепозиции массива начинаются с индекса 0, а не 1, поэтому вы можете рассмотреть возможность добавления банковского счета с 0, а не 1, например:
  • Это случай, если giveNameнаходится в BankAccountList классе.В противном случае, получите ответ KjetilNordin .

bankAccount[0] = giveName("MR", "Travis");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...