Я никогда не использую маркировки в своем коде. Я предпочитаю создавать защиту и инициализировать ее к пустой указатель или другое необычное значение. Эта защита часто является объектом результата. Я не видел ни одного из своих коллег, использующих маркировки, ни нашел любого в нашем репозитории. Это действительно зависит от Вашего стиля кодирования. По-моему, использование маркировок уменьшило бы удобочитаемость, поскольку это не общая конструкция, и обычно это не используется в Java.
Я обнаружил, что это работает:
public class SubclassConvention : ISubclassConvention, ISubclassConventionAcceptance
{
#region IConvention<ISubclassInspector,ISubclassInstance> Members
public void Apply(ISubclassInstance instance)
{
if (instance.Name == typeof(SalesInvoice).AssemblyQualifiedName)
instance.DiscriminatorValue("SAL");
}
#endregion
#region IConventionAcceptance<ISubclassInspector> Members
public void Accept(IAcceptanceCriteria<ISubclassInspector> criteria)
{
criteria.Expect(subclass => Type.GetType(subclass.Name).BaseType == typeof(Invoice));
}
#endregion
}
В этом сценарии у меня есть класс SalesInvoice, производный от класса Invoice. Критерии приемки для подкласса истинны, если текущий подкласс является производным от Invoice. Значение дискриминатора присваивается в зависимости от типа подкласса. Как видите, я сравниваю типы по именам. К сожалению, по какой-то причине свойство subclass.EntityType имеет значение null во время выполнения, поэтому я не могу напрямую сравнивать типы.