Java: использование поставщика для передачи значений во время выполнения - PullRequest
0 голосов
/ 03 июня 2019

Проблема, которую я пытаюсь решить, описана в OO: зависимому классу нужна информация от класса прародителя

 import java.util.function.Supplier;

 public class SupplyMe {

     private Supplier<String> supplied;

     public SupplyMe(Supplier<String> supplied) {
         this.supplied = supplied;
     }

     public void printSupplied() {
         System.out.println(supplied.get());
     }

     public static void main(String[] args) {

         String changingStr = "hi";
         Supplier<String> helloStrSupplier = () -> changingStr;

         SupplyMe mySupplyMe = new SupplyMe(helloStrSupplier);

         mySupplyMe.printSupplied();

         changingStr = "hi2";
         mySupplyMe.printSupplied();

     }
 }

следующий код выбрасывает

SupplyMe.java:18: error: local variables referenced from a lambda expression must be final or effectively final
        Supplier<String> helloStrSupplier = () -> changingStr;

Что я могу сделать, чтобы Поставщик мог дополнить значение во время выполнения?

1 Ответ

0 голосов
/ 03 июня 2019

я смог заставить его работать, сделав это

import java.util.function.Supplier;

 public class SupplyMe {

     public static String changingStr = "";
     private Supplier<String> supplied;

     public SupplyMe(Supplier<String> supplied) {
         this.supplied = supplied;
     }

     public void printSupplied() {
         System.out.println(supplied.get());
     }

     public static void main(String[] args) {

         changingStr = "hi";
         //Supplier<String> helloStrSupplier = changingStr;
         Supplier<String> helloStrSupplier = new DynamicSupplier();

         SupplyMe mySupplyMe = new SupplyMe(helloStrSupplier);


         mySupplyMe.printSupplied();


         changingStr = "hi2";
         mySupplyMe.printSupplied();

     }

     static class DynamicSupplier implements Supplier<String> {
         @Override
         public String get() {
             return changingStr;
         }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...