class BeanCompare {

  public List<BeanDifference<?>> compare(Bean bean1, Bean bean2) {
    ArgumentChecker.notNull(bean1, "bean1");
    ArgumentChecker.notNull(bean2, "bean2");
    if (!sameClass(bean1, bean2)) {
      throw new IllegalArgumentException("Beans must be of the same class. bean1 class: " + bean1.getClass() +
          ", bean2 class: " + bean2.getClass());
    }
    return compare(bean1, bean2, Collections.<MetaProperty<?>>emptyList());
  }

  public  BeanCompare();
  public  BeanCompare(
      Map<MetaProperty<?>, Comparator<Object>> propertyComparators,
      Map<Class<?>, Comparator<Object>> typeComparators);

}