Java анонимные классы vs. C# (дубль 3)
Как-то это неконсистентно всё выглядит.Нашол где ее искать.
Как-то это неконсистентно всё выглядит.Фигня. Джавашные дженерики веселее!
// This is to work around Java's pathetic implementation (if you can call it that) of generic types
@SuppressWarnings("unchecked")
private static <T> Class<List<T>> listOf(@SuppressWarnings("unused")Class<T> elementClass) {
// Note: the cast to Class<?> is not redundant, no matter what your IDE tells you
return (Class<List<T>>) (Class<?>) List.class;
}
public class GenericHibernateDAO<T, ID> implements GenericDAO<T, ID>, PreconfigDAO
{
private Class<T> persistentClass;
private String tablename;
private EntityManager em;
@SuppressWarnings("unchecked")
public GenericHibernateDAO
{
this.persistentClass = (Class<T>) ParameterizedType) getClass.getGenericSuperclass.getActualTypeArguments[0];
tablename = persistentClass.getName;
}
...
ЗЫ Код не мой, но оч мне нравиццо =)
cells..Distinct(new Mock<IEqualityComparer<ICell>>
{
Equals = (x,y)=>GetKey(x)==GetKey(y
GetHashCode = x => GetKey(x).GetHashCode
});
cells.Distinct({ new IEqualityComparer with member x.Equals (a, b) = a = b })
угадай язык
т.е. каждый интерфейс сопровождать своим классом Mock? (набор свойств Mock класса соответствует интерфейсу). Неоправданное усложнение.
code:cells.Distinct({ new IEqualityComparer with member x.Equals (a, b) = a = b })читается не очень удобно, не понятно к чему относится первый метод, к чему второй. Если я поменяю местами методы в интерфейсе, твою строчку тоже менять?
угадай язык
Distinct, очевидно, относится к cells
В интерфейсе всего один метод - Equals.ты про какой интерфейс?
в интерфейсе IEqualityComparer из первого поста два метода.
Ну тогда будет так:
cells.Distinct({ new IEqualityComparer with
member x.Equals (a, b) = a = b
member x.GetHashCode(object obj) = obj.ToString.ToLower.GetHashCode})
Ох, этож где такой лёгкий хэшкод может понадобиться?
Оставить комментарий
6yrop
полтора года назад , я тут писал "". В том треде за мной остался хороший краткий пример, который демонстрирует преимущества Java анонимных классов. Сейчас натолкнулся на метод в самом .NET Framework System.Linq.Enumerable.Distinct(this source, comparer)Это еще хорошо, что метод GetKey оказался статическим, а если бы он был метод инстанса, то пришлось бы еще в конструкторе передавать ссылку на внешний класс.
Т.е. если нужен один метод, то мы имеет элегантную запись через лямбда выражения, а если добавляем второй метод, то получаем вот такие агрегаты. Как-то это неконсистентно всё выглядит.