Size: a a a

2020 February 21

QH

Quantum Harmonizer in pro.jvm
Human
Ну из примера надеюсь понятно, что я хотел сделать.
ну похоже, что первая функция возвращает функцию...
источник

NB

Nikita Bezverkhy in pro.jvm
dima
используй static {}
чувак, я так и делал
в этом и проблема
источник

d

dima in pro.jvm
либо, проверяй в своем методе, что контейнер живой
источник

d

dima in pro.jvm
Nikita Bezverkhy
чувак, я так и делал
в этом и проблема
в коде выше?
источник

NB

Nikita Bezverkhy in pro.jvm
dima
в коде выше?
не, код выше это уже от отчаянья
источник

NB

Nikita Bezverkhy in pro.jvm
dima
в коде выше?
public static PostgreSQLContainer<?> container = new PostgreSQLContainer<>();
 
 static {
   container.start();
 }
источник

NB

Nikita Bezverkhy in pro.jvm
dima
либо, проверяй в своем методе, что контейнер живой
это как?
источник

H

Human in pro.jvm
Quantum Harmonizer
ну похоже, что первая функция возвращает функцию...
Ну это типо конечный автомат и абстракция для написания текстовых ботов. Типа отдаем Select, пользователь выбирает там чето, возвращается String выбранного в Select, который кидаем в функцию обработчик и далее переходит к след состоянию автомата если нужно
источник

ДЧ

Денис Чиканов in pro.jvm
Quantum Harmonizer
> они не должны быть одинаковыми, но должны использоваться только вместе
я вот не понял, что это значит — вангую, что система типов тоже не поймёт
Это, кажется, можно рефлексией проверять в рантайме, но 1) это отвратительное решение 2) только с точностью до type erasure
источник

d

dima in pro.jvm
public class AbstractIntegrationTest {

   private static final String IMAGE_VERSION = "postgres:12.1";
   private static final String DB_NAME = «kek»;
   private static final String USERNAME = «lol»;
   private static final String PASSWORD = «lol»;

   public static PostgreSQLContainer postgres = new PostgreSQLContainer<>(IMAGE_VERSION).withDatabaseName(DB_NAME)
                                                                                        .withUsername(USERNAME)
                                                                                        .withPassword(PASSWORD);

   static {
       postgres.start();

       System.setProperty("spring.datasource.url", postgres.getJdbcUrl());
   }
}
источник

d

dima in pro.jvm
dima
public class AbstractIntegrationTest {

   private static final String IMAGE_VERSION = "postgres:12.1";
   private static final String DB_NAME = «kek»;
   private static final String USERNAME = «lol»;
   private static final String PASSWORD = «lol»;

   public static PostgreSQLContainer postgres = new PostgreSQLContainer<>(IMAGE_VERSION).withDatabaseName(DB_NAME)
                                                                                        .withUsername(USERNAME)
                                                                                        .withPassword(PASSWORD);

   static {
       postgres.start();

       System.setProperty("spring.datasource.url", postgres.getJdbcUrl());
   }
}
дальше наследуешься от него и в @Test методе уже контейнер доступен будет
источник

d

dima in pro.jvm
это все из доки с сайта
источник

d

dima in pro.jvm
а выше пример для Spring
источник

H

Human in pro.jvm
Денис Чиканов
Это, кажется, можно рефлексией проверять в рантайме, но 1) это отвратительное решение 2) только с точностью до type erasure
Я хочу чтобы была какая-то гарантия проверки, что если первая функция возвращает определенный тип, то в следующую передасться другой связанный с этим типом тип.. В других модулях должна быть возможность добавить например ImageGrabber и ImageResponse. И при передачи двух лямбд пользователь должен получить гарантии что типы "соотвествуют" друг другу
источник

QH

Quantum Harmonizer in pro.jvm
Human
Я хочу чтобы была какая-то гарантия проверки, что если первая функция возвращает определенный тип, то в следующую передасться другой связанный с этим типом тип.. В других модулях должна быть возможность добавить например ImageGrabber и ImageResponse. И при передачи двух лямбд пользователь должен получить гарантии что типы "соотвествуют" друг другу
ну ты же первым параметром принимаешь функцию, которая возвращает функцию, возвращение которой передаётся во вторую?
источник

H

Human in pro.jvm
Quantum Harmonizer
ну ты же первым параметром принимаешь функцию, которая возвращает функцию, возвращение которой передаётся во вторую?
askAndAnswer принимает две функции, я вот об этом
источник

H

Human in pro.jvm
Остальное там не так важно, это для примера просто, чтобы идею понять
источник

АC

Алексей C in pro.jvm
Human
Пишу либу, подскажите, пожалуйста, как мне реализовать одну задумку на джаве.
Вообщем есть метод который принимает на вход две лямбды Supplier и Consumer. Мне нужно как-то связать тип возвращаемого значения и принимаемого, они не должны быть одинаковыми, но должны использоваться только вместе. Похоже на перегрузку с дженериками, но мне нужно еще, чтобы "перегружать" можно было и в любом другом участке кода, что похоже на котлиновские экстеншн функции, но мне нужно на Java.

Вот пример чего я хочу достичь: https://pastebin.com/Har3MCH6
askAndAnswer должно быть можно перегружать из других модулей

public void test() {
       Routes
               .when(MyState.PizzaSelect,
                       askAndAnswer(
                               () -> new Select("Выберите пиццу", List.of("Маргарита", "Пепперони", "Мясная")),
                               (String res) -> {
                                   save(res);
                                   next(MyState.Order);
                               }
                       )
               )
               .when(MyState.Number,
                       askAndAnswer(
                               () -> new NumberQuestion("Сколько?"),
                               (Integer res) -> {
                                   save(res);
                               }
                       )
               );
   }

   public static void askAndAnswer(Supplier<Select> q, Consumer<String> a) {

   }
   public static void askAndAnswer(Supplier<NumberQuestion> q, Consumer<Integer a) {

   }
в чем проблема два метода с разными именами сделать?
источник

H

Human in pro.jvm
Алексей C
в чем проблема два метода с разными именами сделать?
Ну идея была в расширяемости, то есть постепенно будет добавлятся новые типы и плодить названия не хочется. Типы должно быть можно добавлять из других модулей. Плюс если типов много, то будут конфликты с названиями, если будет несколько модулей добавляющих новые типы
источник

NB

Nikita Bezverkhy in pro.jvm
dima
а выше пример для Spring
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class DeviceControllerTest {

 public static PostgreSQLContainer<?> container = new PostgreSQLContainer<>("postgres:latest");

 static {
   container.start();

   System.setProperty("driver-class-name", container.getDriverClassName());
   System.setProperty("spring.datasource.url", container.getJdbcUrl());
   System.setProperty("spring.datasource.username", container.getUsername());
   System.setProperty("spring.datasource.password", container.getPassword());
 }

 @Autowired
 private DeviceUploadDataService service;

 @Test
 public void findBySerialNumber() {
   // given
   List<DeviceUploadData> actual = service.findAll();

   // then
   assertThat(actual).isNotEmpty();
 }
}


мой реальный тест, тоже падает
источник