public interface Lazy<T>
Lazy computes its value on
 the first call to get() and remembers that same value for all
 subsequent calls to get().
 All implementations are expected to be thread-safe and compute their value at most once.
    @Module
   final class CounterModule {
     int next = 100;
      @Provides Integer provideInteger() {
       System.out.println("computing...");
       return next++;
     }
   }
 
 
   final class DirectCounter {
      @Inject Integer value;
     void print() {
       System.out.println("printing...");
       System.out.println(value);
       System.out.println(value);
       System.out.println(value);
     }
   }
 
 Injecting a DirectCounter and invoking print() reveals that
 the value is computed before it is required:
   computing...
   printing...
   100
   100
   100
 
 Provider.get() 3 times and prints each result:
 
   final class ProviderCounter {
      @Inject Provider<Integer> provider;
     void print() {
       System.out.println("printing...");
       System.out.println(provider.get());
       System.out.println(provider.get());
       System.out.println(provider.get());
     }
   }
 
 Injecting a ProviderCounter and invoking print() shows that
 a new value is computed each time Provider.get() is used:
   printing...
   computing...
   100
   computing...
   101
   computing...
   102
 
 Lazy for the integer. Like the provider above,
 it calls Lazy.get() 3 times and prints each result:
   final class LazyCounter {
      @Inject Lazy<Integer> lazy;
     void print() {
       System.out.println("printing...");
       System.out.println(lazy.get());
       System.out.println(lazy.get());
       System.out.println(lazy.get());
     }
   }
 
 Injecting a LazyCounter and invoking print() shows that a new
 value is computed immediately before it is needed. The same value is returned
 for all subsequent uses:
   printing...
   computing...
   100
   100
   100
 
 Lazy is independent, and remembers its value
 in isolation of other Lazy instances. In this example, two LazyCounter objects are created and print() is called on each:
 
   final class LazyCounters {
      @Inject LazyCounter counter1;
      @Inject LazyCounter counter2;
     void print() {
       counter1.print();
       counter2.print();
     }
   }
 
 The output demonstrates that each Lazy works independently:
 
   printing...
   computing...
   100
   100
   100
   printing...
   computing...
   101
   101
   101
 
 Use @Singleton to share one instance among all
 clients, and Lazy for lazy computation in a single client.| Modifier and Type | Method and Description | 
|---|---|
T | 
get()
Return the underlying value, computing the value if necessary. 
 | 
T get()
Lazy instance will return the same result.