Дженерики или не Дженерики

Вам необходимо отменить запись в главный байт-фрагмент во время рекурсивного отслеживания:

if mstr[index] == q {
        mstr[index] = a
        allstr(mstr, index+1, size, q, a, b)

        mstr[index] = b
        allstr(mstr, index+1, size, q, a, b)

        mstr[index] = q         // <--- add this
} 

https://play.golang.org/p/-JEsVGFcsQo [ 113]

6
задан Joan Venge 27 February 2009 в 21:44
поделиться

7 ответов

• Все идентификаторы имеют интервал типа.

• Тип фруктов не будет влиять на реализацию самого Списка. Это будет только использоваться клиентом списка, как внешний метод, и т.д.

Учитывая эти два факта, я не обеспокоился бы дженериками. Я поместил бы нормальное свойство на FruitList для указания, какой тип фруктов это.

3
ответ дан 8 December 2019 в 02:41
поделиться

Используйте комбинацию:

public class AppleList : FruitList<Apple> { ... }
public class OrangeList : FruitList<Orange> { ... }
public class LemonList : FruitList<Lemon> { ... }

Поместите общую логику в основной класс списка:

public class FruitList<T> : List<T>
    where T : IFruit 
{ ... }
10
ответ дан 8 December 2019 в 02:41
поделиться

Снова используйте классы универсального набора и разделите их на подклассы, только если Вы добавляете дополнительную функциональность. Сохраните свою реализацию подкласса универсальной, если Вы можете. Это - наименее сложная реализация.

3
ответ дан 8 December 2019 в 02:41
поделиться

Намного легче вести 1 универсальный список, чем 3 неуниверсальных версии. Если Вам действительно нравится название AppleList, можно всегда использовать прием использования для именования универсального списка

using AppleList=Fruit.FruitList<Fruit.Apple>
7
ответ дан 8 December 2019 в 02:41
поделиться

При использовании дженериков есть ли цель создать тип FruitList? Вы могли просто использовать Список?

Не будет большой разницы в производительности, таким образом, я скажу, почему создают три различных класса, когда можно было бы сделать то же точно вещь? Используйте универсальное решение.

9
ответ дан 8 December 2019 в 02:41
поделиться

Используйте Универсальный список, никакой смысл в упаковке в ящики 3 списков, и всегда хорошо сохранить уровень абстракции. (IFruit был бы хорошим интерфейсом).

1
ответ дан 8 December 2019 в 02:41
поделиться

Необходимо принять YAGNI, если Вам не нужен он. Поэтому, если Вам не нужен antyhing больше, чем Вы входите в Список, затем просто List<T>. Если по некоторым причинам необходимо переопределить Список, то создайте

FruitList<T> : List<T> where T : Fruit

Если Ваши списки отличаются и больше не являются полиморфными, то рассматривают реализацию Ваших пользовательских списков:

  • AppleList
  • OrangeList
  • LemonList

Попробуйте настолько же лучше всего, Вы можете, однако, для хранения иерархии наследования максимально плоской, чтобы не сверхусложнять решение.

0
ответ дан 8 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: