У меня есть метод, который использует общий интерфейс класса в качестве аргумента, я хотел бы проверить, что предоставленный интерфейс расширяет некоторый базовый класс, если он не будет вызывать исключение. Можно ли сделать что-то похожее на:Можно ли оценить, расширяет ли интерфейс класса определенный базовый класс?
public void genericMethod(Class<T> c) {
if (!(c instanceof baseClass)) {
throw new Exception("Must be instance of base class");
}
}
Даже если это возможно, считалось бы это хорошей практикой? Или должны ли java generics следовать тем же принципам ducktyping
?
Чтобы быть более точным 'baseClass.class.isAssignableFrom (с) '. Во всяком случае +1 – Pshemo
О, я понимаю, о чем вы. Тем не менее, нет единого, общего решения: если 'baseClass' является' Class' (как я предполагал первоначально, на основе соглашений Java), вы не должны использовать '.class'. Если это * имя * класса, то вы должны использовать '.class'. Чтобы быть более точным, если 'baseClass' является именем класса, тогда код, который я изначально написал, даже не компилируется; однако, если это переменная типа 'Class', тогда ваш код даже не будет компилироваться. –
Поскольку OP использовал 'instanceof baseClass', я предположил, что' baseClass' является именем интерфейса, а не ссылкой на класс, но все возможно на SO questins :) – Pshemo