Лучший способ проверить, если Система. Тип является потомком данного класса

Кажется, что несколько файлов persistence.xml являются общей проблемой с JPA, решенным только приемами classloading.

обходное решение А, которое работает на меня, должно определить несколько единиц персистентности в одном файле persistence.xml и затем удостовериться, что Ваше развертывание и тестовый код используют различную привязку (в Spring, можно установить "persistenceUnitName" свойство на фабрике менеджера по объекту). Это загрязняет Ваш файл развертывания тестовой конфигурацией, но если Вы не возражаете против этого, это работает хорошо.

16
задан chollida 23 October 2009 в 16:05
поделиться

4 ответа

Type.IsSubclassOf () Определяет, является ли класс, представленный текущим типом, производным от класса, представленного указанным типом.

25
ответ дан 30 November 2019 в 16:00
поделиться

Вы, вероятно, ищете Type.IsAssignableFrom .

15
ответ дан 30 November 2019 в 16:00
поделиться

Я понимаю, что это не дает прямого ответа на ваш вопрос, но вы можете подумать об использовании этого вместо метода в вашем примере:

public static bool IsDescendantOf<T>(this object o)
{
    if(o == null) throw new ArgumentNullException();
    return typeof(T).IsSubclassOf(o.GetType());
}

Таким образом, вы можете использовать его следующим образом:

C c = new C();
c.IsDescendantOf<A>();

Также , чтобы ответить на ваш вопрос о разнице между Type.IsSubclassOf и Type.IsAssignableFrom - IsAssignableFrom слабее в том смысле, что если у вас есть два объекта a и b, такие, что это верно:

a = b;

Затем typeof (A). IsAssignableFrom (b.GetType ()) истинно - поэтому a может быть подклассом b или типом интерфейса.

Напротив, a.GetType (). IsSubclassOf (typeof (B)) вернет истину, только если a является подклассом b. Учитывая имя вашего метода расширения, я бы сказал, что вам следует использовать IsSubclassOf вместо IsAssignable to;

5
ответ дан 30 November 2019 в 16:00
поделиться

Я думаю, вы ищете этот Type.IsSubclassOf ()

Изменить:

Я не знаю ваших требований, но, возможно, это лучший способ:

bool isDescendant = cValue is C;
0
ответ дан 30 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

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