Возможный дубликат:
Общий тип локальной переменной во время выполнения
Я новичок в Java-дженериках и, исходя из .NET-мира, я привык к тому, что могу написать такой метод:
public void genericMethod<T>(T genericObject)
{
if (genericObject is IList<String>)
{
//Do something...
}
}
Метод принимает объект родового типа и проверяет, реализует ли этот объект конкретную версию общего интерфейса IList<>
, в данном случае IList<String>
.
Теперь, в Java, я могу это сделать:
public <T> void genericMethod(T genericObject)
{
if (genericObject instanceof Set<?>)
{
//Do something...
}
}
НО
Java не позволяет мне делать if (genericObject instanceof Set<String>)
Из того, что я знаю, из-за стирания типа, обычно в Java, это будет заботиться об объекте класса, и мы будем делать что-то вроде следующего:
public <T> void genericMethod(T genericObject)
{
Class<OurTestingType> testClass = OurTestingType.class;
if (genericObject.getClass() == testClass)
{
//Do something...
}
}
но поскольку тип, который я проверяю, является общим интерфейсом, вы не можете этого сделать:
Class<Set<String>> testClass = Set<String>.class
Итак, как на Java проверять, реализует ли общий объект определенный тип Set<String>
?