Это сделано для того, чтобы я мог по-настоящему гибко назначить тип возврата запроса в реальном помощнике.
В типе возврата этого метода нет ничего гибкого
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
Он всегда будет возвращать экземпляр QueryHelper
.Если вы хотите, чтобы возвращаемый тип был гибким, вам необходимо определить его следующим образом:
static <T> T getQueryHelper (Class<T> expectedReturn) {
}
Теперь возвращаемый тип является гибким, поскольку он будет зависеть от типа аргумента
И реальная суть этого в том, что я не понимаю разницу между class.isInstance и оператором instanceOf?
Разница в том, что instanceof делает проверку типов, которая исправленаво время компиляции, например:
static boolean isInstance(Object myVar) {
return (myVar instanceof Foo);
}
всегда будет проверять, что myVar является экземпляром Foo, тогда как
static <T> boolean isInstance(Object myVar, Class<T> expectedType) {
return expectedType.isInstance(myVar);
}
проверяет, что myVar является экземпляром Ожидаемый тип, но ожидается типможет быть разным типом каждый раз, когда метод вызывается