001package java8; 002 003import com.sandwich.koan.Koan; 004 005import static com.sandwich.koan.constant.KoanConstants.__; 006import static com.sandwich.util.Assert.assertEquals; 007 008public class AboutDefaultMethods { 009 010 @Koan 011 public void interfaceDefaultMethod() { 012 StringUtil stringUtil = new StringUtil() { 013 @Override 014 public String reverse(String s) { 015 return new StringBuilder(s).reverse().toString(); 016 } 017 }; 018 String capitalizedReversed = stringUtil.capitalize( 019 stringUtil.reverse("gnirut")); 020 assertEquals(capitalizedReversed, __); 021 } 022 023 @Koan 024 public void interfaceStaticMethod() { 025 assertEquals(StringUtil.enclose("me"), __); 026 } 027 028 interface StringUtil { 029 030 //static method in interface 031 static String enclose(String in) { 032 return "[" + in + "]"; 033 } 034 035 String reverse(String s); 036 037 //interface can contain non-abstract method implementations marked by "default" keyword 038 default String capitalize(String s) { 039 return s.toUpperCase(); 040 } 041 042 default String capitalizeFirst(String s) { 043 return s.substring(0, 1).toUpperCase() + s.substring(1); 044 } 045 } 046 047}