title: Are interfaces a valid substitute for utility classes in Java 8?
body: <p>For the past decade or so, I've been using the pattern below for my Java utility classes. The class contains only static methods and fields, is declared <code>final</code> so it can't be extended, and has a <code>private</code> constructor so it can't be instantiated.</p>
  
  <pre><code>public final class SomeUtilityClass {
      public static final String SOME_CONSTANT = "Some constant";
  
      private SomeUtilityClass() {}
  
      public static Object someUtilityMethod(Object someParameter) {
          /* ... */
  
          return null;
      }
  }
  </code></pre>
  
  <p>Now, with the introduction of <a href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html#static">static methods in interfaces</a> in Java 8, I lately find myself using a utility interface pattern:</p>
  
  <pre><code>public interface SomeUtilityInterface {
      String SOME_CONSTANT = "Some constant";
  
      static Object someUtilityMethod(Object someParameter) {
          /* ... */
  
          return null;
      }
  }
  </code></pre>
  
  <p>This allows me to get rid of the constructor, and a lot of keywords (<code>public</code>, <code>static</code>, <code>final</code>) that are implicit in interfaces.</p>
  
  <p>Are there any downsides to this approach? Are there any benefits to using a utility class over a utility interface?</p>