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}