Почему класс метода Java не является универсальным? - PullRequest
2 голосов
/ 28 мая 2009

Это позволило бы методу invoke иметь правильный тип возврата. Например:

class Method<T> {
    T invoke(Object obj, Object... args);
}

Ответы [ 2 ]

2 голосов
/ 28 мая 2009

В Java Generics доступны только во время компиляции. Вы не можете определить общий тип во время выполнения. Это позволило реализации дженериков быть обратно совместимыми со старыми версиями JVM.

Поскольку обобщения доступны только во время компиляции, если вы знаете тип вашего класса, вам не нужно использовать рефлексию.

1 голос
/ 28 мая 2009

Было бы весьма разумно сделать Method универсальным для стертого возвращаемого типа. Тем не менее, это будет много усилий с небольшой прибылью. Природа отражения заключается в том, что вы не знаете типы во время компиляции - в противном случае вы могли бы статически связать.

Полагаю, в некоторых случаях вы могли бы даже добавить новые API, чтобы возвращался общий тип. Информация по-прежнему находится в методе, но не в экземпляре, который вы передаете ему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...