Это позволит методу invoke иметь правильный тип возврата. Например:
Почему класс метода Java не является общим?
class Method<T> {
T invoke(Object obj, Object... args);
}
Это позволит методу invoke иметь правильный тип возврата. Например:
Почему класс метода Java не является общим?
class Method<T> {
T invoke(Object obj, Object... args);
}
В Java, Дженерики доступны только во время компиляции. Вы не можете определить тип Generic во время выполнения. Это позволило реализовать реализацию дженериков обратно со старыми версиями JVM.
Поскольку дженерики доступны только во время компиляции, если вы знаете тип своего класса, тогда вам не нужно использовать отражение.
Было бы неразумно делать Method
общий на стертый тип возврата. Однако с небольшим усилением было бы много усилий. Характер рефлексии заключается в том, что вы не знаете типы во время компиляции, иначе вы могли бы статически связать.
Я думаю, вы могли бы в некоторых случаях даже добавить новые API, чтобы возвращался общий тип. Информация по-прежнему находится на методе, хотя и не в том экземпляре, который вы передаете ему.
Я собирался ответить на что-то подобное, поэтому вместо этого я добавлю: Компилятор Java стирает информацию о типе в обобщениях при компиляции. Поскольку отражение оценивается во время выполнения, вся информация о типе будет уже удалена, что делает ее в основном бессмысленной. – Pesto
Это неправда. См. Http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/TypeLiteral.html – robson
Pesto: он не удаляет стираемый возвращаемый тип метода! –