Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / цепочка методов / 25 сообщений из 31, страница 1 из 2
12.12.2019, 15:07
    #39901910
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Привет!
Подскажите пожалуйста, как организовать вывод цепочки методов, последовательно? Сейчас объясню что имею в виду.
К примеру есть класс SomeClass , и у него есть два метода 1) Задать характеристики 2) Снять значение после ввода характеристик.
Ну пусть к примеру они будут называться 1) createParameters 2) showResult и модификатор доступа у обоих - public

Классическая схема вызова:
Код: java
1.
2.
3.
SomeClass sm = new SomeClass();
sm.createParameters();
sm.showResult();



Но хотелось бы найти возможность создания примерно такого варианта обращения:
Код: java
1.
2.
SomeClass sm = new SomeClass();
sm.createParameters().showResult();



Подскажите пожалуйста, как такое организовать? И чтобы видимость у второго метода showResult появлялась только после вызова первого createParameters .
...
Рейтинг: 0 / 0
12.12.2019, 15:22
    #39901927
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов,

очевидно, что метод должен тупо возвращать указатель на экземпляр класса
...
Рейтинг: 0 / 0
12.12.2019, 15:25
    #39901929
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Дмитрий Мух,
А пример можете показать?)
...
Рейтинг: 0 / 0
12.12.2019, 15:26
    #39901932
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов

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

Ну это тебе в скалу) там такое легко.

На Java можно что-то типо такого сделать -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Builder(){
   public WithParams setParams(Map params) = {
       return new WithParams(params);
   }
}

class WithParams {
   private params = new HashMap();
  public WithParams(Map params) = {
     this.params = params;
  }

   public void run(){
   // do someth with params
}
}
...
Рейтинг: 0 / 0
12.12.2019, 15:27
    #39901933
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Типа того:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class SomeClass {
    public SomeClass createParameters() {
        // Do something...

        return this;
    }

    public void showResult() {
        // Do something...
    }
}
...
Рейтинг: 0 / 0
12.12.2019, 15:28
    #39901934
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Если хочешь понять как это делается в развитом языке - то смотри тут https://medium.com/@maximilianofelice/builder-pattern-in-scala-with-phantom-types-3e29a167e863
...
Рейтинг: 0 / 0
12.12.2019, 15:29
    #39901935
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Дмитрий Мух
Типа того:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class SomeClass {
    public SomeClass createParameters() {
        // Do something...

        return this;
    }

    public void showResult() {
        // Do something...
    }
}



И чем ему это поможет?
...
Рейтинг: 0 / 0
12.12.2019, 15:29
    #39901936
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Дмитрий Мух, забыл ник , вкурил, большое спс за оперативность!)
...
Рейтинг: 0 / 0
12.12.2019, 15:33
    #39901943
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов,

вообще это называется Fluent Interface: https://java-design-patterns.com/patterns/fluentinterface/
а цепочка методов - это когда вы вызываете метод, что возвращает некий объект, у которого можно вызвать следующий метод
...
Рейтинг: 0 / 0
12.12.2019, 15:36
    #39901947
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
еще Builder/SuperBuilder в ломбок есть ну или хотя бы плагины в IDEA для генерации этого boilerplate
...
Рейтинг: 0 / 0
12.12.2019, 15:37
    #39901948
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Дмитрий Мух,
да, возврат класса в методе с последующим обращением к нему как к классу это решение. Сам не допер,затупил, ех, решение так близко по сути было)
...
Рейтинг: 0 / 0
12.12.2019, 15:46
    #39901954
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Билдер можно сделать умным. Чтоб исключал дублирование заполнения свойств. Или делал какие-то шаблоны
объектов на конструкторе а потом добивал их свойствами.
...
Рейтинг: 0 / 0
12.12.2019, 16:04
    #39901966
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Всем спасибо, все завелось. Огонь)

Небольшой пример на тестовом жертвенном классе Cars) :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class Cars {
    private String model;
    private int year;
    private static ArrayList<Cars> listCars;

    public Cars() {

    }
    public Cars(String model, int year) {
        this.model = model;
        this.year = year;
    }
    private String getModel() {
        return model;
    }
    private int getYear() {
        return year;
    }
    public  Cars makeCars(int quantity) {
        listCars = new ArrayList<>();
        for (int i = 1; i <= quantity; i++) {
            listCars.add(new Cars("Volvo", 2000 + i));
        }
        return this;
    }
        public  void showCars () {
            for (Cars car : listCars) {
                System.out.println(car.getModel() + " год выпуска: " + car.getYear());
            }
        }

    }




и вызов:

Код: java
1.
2.
Cars cr = new Cars();
cr.makeCars(6).showCars();



Отлично)
...
Рейтинг: 0 / 0
12.12.2019, 16:14
    #39901975
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов
Отлично)
толко пример придумай чтобы ценность была видна.
Тут ценность равна нулю.
...
Рейтинг: 0 / 0
12.12.2019, 16:21
    #39901979
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
а так?

Код: java
1.
cr.showCars().makeCars(6);
...
Рейтинг: 0 / 0
12.12.2019, 16:22
    #39901980
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
PetroNotC Sharp,

Механику понял главное. Слепил из того что было под рукой)
...
Рейтинг: 0 / 0
12.12.2019, 16:23
    #39901982
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов
PetroNotC Sharp,

Механику понял главное. Слепил из того что было под рукой)
ты не спутал со Stream.... механику?))
...
Рейтинг: 0 / 0
12.12.2019, 16:24
    #39901984
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов, не увлекайся сильно. Должно быть чувство меры по отношению к написанным буквам и эффекту от решения задачи.
...
Рейтинг: 0 / 0
12.12.2019, 16:24
    #39901985
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
забыл ник
а так?

Код: java
1.
cr.showCars().makeCars(6);


return this;
во все методы вставит)))
...
Рейтинг: 0 / 0
12.12.2019, 16:25
    #39901988
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
забыл ник
а так?

Код: java
1.
cr.showCars().makeCars(6);



А так уже простым примером не обойтись) Придется действительно прописывать условия дополнительные , проверять попутно наличие дубликатов и ставить очередность выполнения в условии. Я думаю смогу написать какое нибудь корявое решение, но знаний и практики в JAva у меня не так много.
...
Рейтинг: 0 / 0
12.12.2019, 16:27
    #39901989
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов
но знаний и практики в JAva у меня не так много.
а кто задачу ставил?
...
Рейтинг: 0 / 0
12.12.2019, 16:28
    #39901994
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
PetroNotC Sharp,

Я сам себе по Java ставлю задачи) Поздно уже дергаться на программиста
...
Рейтинг: 0 / 0
12.12.2019, 16:31
    #39901997
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов
PetroNotC Sharp,

Я сам себе по Java ставлю задачи) Поздно уже дергаться на программиста
понятно. Возврат this это Г. решение.
Удачи!
...
Рейтинг: 0 / 0
12.12.2019, 16:31
    #39901998
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Может конструктора с параметрами хватило-бы?
...
Рейтинг: 0 / 0
12.12.2019, 16:33
    #39902000
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цепочка методов
Сергей Лалов,
хотя еще подергаться потрепыхаться смог бы, если бы практически без опыта в Java (на любую зп даже согласен на начальном этапе)) куда нибудь воткнуться. Обучаем)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / цепочка методов / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]