#java #generics #generic-programming
#java #общие #generic-программирование
Вопрос:
У меня есть небольшой вопрос об универсальном программировании на Java. Есть ли какой-либо способ проверить тип параметра, переданного методу? Я хотел бы сравнить типы экземпляра, который вызывает метод, и переданный ему параметр.
Если они не совпадают, действие метода должно быть остановлено (своего рода защита).
public void homeMatch(SportTeam<Type> visitors){
if(the type of visitors and this-object are not the same){
//do this
}
else{
//do something different
}
}
Комментарии:
1. взгляните на instanceOf operator
Ответ №1:
Вы не можете работать с Type
ним во время выполнения, поскольку он стирается компилятором. Он существует только в исходном коде для целей проектирования.
Будучи более конкретным, эта сигнатура метода будет скомпилирована примерно так
public void homeMatch(SportTeam visitors)
Ответ №2:
Что вы могли бы сделать, если вы действительно хотите иметь эту проверку, это добавить параметр класса к аргументам функций. Затем сравните classParameter с классом this . Это будет работать, потому что посетители имеют тот же общий тип, что и typeClass.
public<Type> void homeMatch(Class<Type> typeClass, SportTeam<Type> visitors){
if (typeClass.getClass() == this.getClass()){
}
}
Ответ №3:
если я правильно понимаю, вы должны использовать instanceof . вот так:
if (visitors instanceof Type) {
// action
}