title: Java 8 interface default method doesn't seem to declare property
body: <p>In my application I run into a problem that when a getter in a class is defaulted in an interface only (Java 8 feature), there is no Java Beans property as a result.  I.e. for normal method invocation it works just as a standard method, but for access through "properties" it suddenly behaves differently...</p>
  
  <p>Here is a test case:</p>
  
  <pre><code>import java.beans.Introspector;
  import java.util.Arrays;
  import java.util.stream.Collectors;
  import org.apache.commons.beanutils.PropertyUtils;
  
  public class test
  {
      public static void main (String[] arguments) throws Exception
      {
          // Normal language-level invocation, works fine.
          System.out.println (new Bean1 ().getFoo ());
          System.out.println (new Bean2 ().getFoo ());
  
          // Printing Java Beans properties; Bean2 doesn't have 'foo' property...
          System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean1.class).getPropertyDescriptors ())
                              .map ((property) -&gt; property.getName ())
                              .collect (Collectors.joining (", ")));
          System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean2.class).getPropertyDescriptors ())
                              .map ((property) -&gt; property.getName ())
                              .collect (Collectors.joining (", ")));
  
          // First call behaves as expected, second dies with exception.
          System.out.println (PropertyUtils.getProperty (new Bean1 (), "foo"));
          System.out.println (PropertyUtils.getProperty (new Bean2 (), "foo"));
      }
  
      public interface Foo
      {
          default String getFoo ()
          {
              return "default foo";
          }
      }
  
      public static class Bean1 implements Foo
      {
          @Override
          public String getFoo ()
          {
              return "special foo";
          }
      }
  
      public static class Bean2 implements Foo
      { }
  }
  </code></pre>
  
  <p>Result:</p>
  
  <pre><code>special foo
  default foo
  class, foo
  class
  special foo
  Exception in thread "main" java.lang.NoSuchMethodException: Unknown property 'foo' on class 'class test$Bean2'
          at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1257)
          at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:808)
          at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:884)
          at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:464)
          at test.main(test.java:21)
  </code></pre>
  
  <p><strong>Questions:</strong> do I do something wrong or is it a bug in Java? Is there a workaround other than never using defaulted methods (for getters/setters) in case you might need to access them as a "property" at some point later?</p>
  
  <p><em>I always hated Java "properties by convention" that tend to break because you sneeze the wrong way.</em></p>