Java - Изменить значение переменной класса для каждого существующего и для каждого нового созданного объекта этого класса? - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в Java и хочу изменить переменную класса для каждого существующего и каждого нового объекта без итерации по каждому объекту.

public class SomeClass {

    private double handlingFee = 0.015;

    public SomeClass(...) {
        ...
    }

Здесь переменная класса handlingFee, и у меня есть коллекция (ArrayList) в другом классе для хранения этих объектов класса. Это как-то возможно?

И не могли бы вы сказать мне, как изменить значение тогда? Нужно ли повторять каждый объект?

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

Во-первых, пункт о терминологии. В вашем коде processingFee не является переменной класса; это переменная экземпляра. Чтобы сделать его переменной класса, объявите его как stati c. Переменная stati c (правильно называемая полем stati c) существует как один экземпляр для всего класса. Все объекты этого класса будут использовать один экземпляр.

Во-вторых, звучит так, как будто ваш дизайн не совсем правильный. Например, ваш класс SomeClass может представлять клиента банка. Вы не должны продолжать обрабатывать Fee в классе Customer; он принадлежит классу BankAccount, к которому относится множество объектов Customer.

0 голосов
/ 22 апреля 2020

Вам необходимо объявить handlingFee как переменную static. Переменная static является переменной класса, и ее значение остается одинаковым для каждого объекта класса.

Демонстрация:

class SomeClass {
    public static double handlingFee = 0.015;
}

public class Main {
    public static void main(String[] args) {
        SomeClass sc1 = new SomeClass();
        SomeClass sc2 = new SomeClass();
        System.out.println(sc1.handlingFee);
        System.out.println(sc2.handlingFee);

        SomeClass.handlingFee = 0.025;
        SomeClass sc3 = new SomeClass();
        SomeClass sc4 = new SomeClass();
        System.out.println(sc1.handlingFee);
        System.out.println(sc2.handlingFee);
        System.out.println(sc3.handlingFee);
        System.out.println(sc4.handlingFee);
    }
}

Вывод:

0.015
0.015
0.025
0.025
0.025
0.025

Неважно, измените ли вы значение handlingFee, используя имя класса или объект класса, его значение будет изменяться для каждого экземпляра (нового и существующего). ) класса.

0 голосов
/ 22 апреля 2020

Вы должны выполнять итерации по каждому экземпляру в коллекции (и создавать установщик / получатель для handleFee)

Например:

List<SomeClass> myCollection = ...
for (SomeClass obj : collection) {
    obj.setHandlingFee(0.3d);
}

или, короче, с API потоков

myCollection.forEach(obj -> obj.setHandlingFee(0.3d))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...