Разъяснение, вы хотите, класс (A
), который вынужден иметь метод конкретного класса (B
), и вы хотите передать этот класс в качестве аргумента в какой-то другой метод (C
) и есть тот метод (C) вызова этот метод класса на этом классе (A.B()
)?
Первая часть, ограничение типа, которое невозможно сделать. Система типов Java просто не работает.
Вторая часть, передающая класс как аргумент и вызывающая метод класса на нем, что может быть сделано с использованием отражения. Вот как это сделать, исправляя ваш код (хотя вы должны быть более осторожны с исключениями, чем я был в этом).
private static <T extends Model> long countModel(Class<T> clazz) throws Exception
{
return (Long) clazz.getMethod("count").invoke(null);
}
The null
является экземпляр для вызова этого на (нет, например, это метод класса). Литой до Long
требуется в результате invoke()
является Object
. Параметр type должен идти до типа результата. И все это может принимать любой класс, который является подклассом Model
в качестве параметра; он будет просто сбой во время выполнения, если нет метода count
. Их перерывы.
(Также обратите внимание, что если вы хотите, чтобы передать аргументы count()
, вы должны указать классы этих аргументов для getMethod
и ценности себя invoke
, в обоих случаях в качестве последующих аргументов. Обе модели поддерживают java5 списки аргументов переменной .)
Я не понимаю, о чем вы просите, 'Country.class' является' Class' и не имеет 'count()'. Не могли бы вы перефразировать свой вопрос на простом английском? –
Вы не являетесь классами, чтобы иметь определенный статический метод? Это очень странный дизайн. – whiskeysierra