Передача общего параметра методу

#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
}