local variable type inference changes (#1036)
local variable type inference changes for design pattern singleton
This commit is contained in:
		@@ -74,36 +74,36 @@ public class App {
 | 
			
		||||
  public static void main(String[] args) {
 | 
			
		||||
 | 
			
		||||
    // eagerly initialized singleton
 | 
			
		||||
    IvoryTower ivoryTower1 = IvoryTower.getInstance();
 | 
			
		||||
    IvoryTower ivoryTower2 = IvoryTower.getInstance();
 | 
			
		||||
    var ivoryTower1 = IvoryTower.getInstance();
 | 
			
		||||
    var ivoryTower2 = IvoryTower.getInstance();
 | 
			
		||||
    LOGGER.info("ivoryTower1={}", ivoryTower1);
 | 
			
		||||
    LOGGER.info("ivoryTower2={}", ivoryTower2);
 | 
			
		||||
 | 
			
		||||
    // lazily initialized singleton
 | 
			
		||||
    ThreadSafeLazyLoadedIvoryTower threadSafeIvoryTower1 =
 | 
			
		||||
    var threadSafeIvoryTower1 =
 | 
			
		||||
        ThreadSafeLazyLoadedIvoryTower.getInstance();
 | 
			
		||||
    ThreadSafeLazyLoadedIvoryTower threadSafeIvoryTower2 =
 | 
			
		||||
    var threadSafeIvoryTower2 =
 | 
			
		||||
        ThreadSafeLazyLoadedIvoryTower.getInstance();
 | 
			
		||||
    LOGGER.info("threadSafeIvoryTower1={}", threadSafeIvoryTower1);
 | 
			
		||||
    LOGGER.info("threadSafeIvoryTower2={}", threadSafeIvoryTower2);
 | 
			
		||||
 | 
			
		||||
    // enum singleton
 | 
			
		||||
    EnumIvoryTower enumIvoryTower1 = EnumIvoryTower.INSTANCE;
 | 
			
		||||
    EnumIvoryTower enumIvoryTower2 = EnumIvoryTower.INSTANCE;
 | 
			
		||||
    var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
 | 
			
		||||
    var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
 | 
			
		||||
    LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
 | 
			
		||||
    LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
 | 
			
		||||
 | 
			
		||||
    // double checked locking
 | 
			
		||||
    ThreadSafeDoubleCheckLocking dcl1 = ThreadSafeDoubleCheckLocking.getInstance();
 | 
			
		||||
    var dcl1 = ThreadSafeDoubleCheckLocking.getInstance();
 | 
			
		||||
    LOGGER.info(dcl1.toString());
 | 
			
		||||
    ThreadSafeDoubleCheckLocking dcl2 = ThreadSafeDoubleCheckLocking.getInstance();
 | 
			
		||||
    var dcl2 = ThreadSafeDoubleCheckLocking.getInstance();
 | 
			
		||||
    LOGGER.info(dcl2.toString());
 | 
			
		||||
 | 
			
		||||
    // initialize on demand holder idiom
 | 
			
		||||
    InitializingOnDemandHolderIdiom demandHolderIdiom =
 | 
			
		||||
    var demandHolderIdiom =
 | 
			
		||||
        InitializingOnDemandHolderIdiom.getInstance();
 | 
			
		||||
    LOGGER.info(demandHolderIdiom.toString());
 | 
			
		||||
    InitializingOnDemandHolderIdiom demandHolderIdiom2 =
 | 
			
		||||
    var demandHolderIdiom2 =
 | 
			
		||||
        InitializingOnDemandHolderIdiom.getInstance();
 | 
			
		||||
    LOGGER.info(demandHolderIdiom2.toString());
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ public final class ThreadSafeDoubleCheckLocking {
 | 
			
		||||
    // local variable increases performance by 25 percent
 | 
			
		||||
    // Joshua Bloch "Effective Java, Second Edition", p. 283-284
 | 
			
		||||
    
 | 
			
		||||
    ThreadSafeDoubleCheckLocking result = instance;
 | 
			
		||||
    var result = instance;
 | 
			
		||||
    // Check if singleton instance is initialized. If it is initialized then we can return the instance.
 | 
			
		||||
    if (result == null) {
 | 
			
		||||
      // It is not initialized but we cannot be sure because some other thread might have initialized it
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user