Непроверенное приведение дженериков Java - можно проверить во время выполнения? - PullRequest
0 голосов
/ 14 декабря 2011
// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
    Object result = continuation.getAttribute("result");
    return (T) result;
}

Можно ли (во время выполнения) проверить, что result можно привести к T?

Ответы [ 4 ]

3 голосов
/ 14 декабря 2011

Это возможно во время выполнения, но вам нужен токен общего типа.Обычно вы передаете это в конструктор вашего универсального типа

class SomeGeneric<T>

private Class<T> token;

public SomeGeneric(Class<T> token) {
    this.token=token;
}

Затем в вашем методе вы можете проверить это во время выполнения

return token.cast(result) // throws ClassCastException
3 голосов
/ 14 декабря 2011

Не в рамках этого метода. Вся информация о типах, связанная с T, удаляется компилятором.

2 голосов
/ 14 декабря 2011

Нет. Для проверки во время выполнения вам нужен экземпляр класса, чтобы вы могли использовать isAssignableFrom . У вас нет доступа к этому с помощью T из-за стирания типа.

0 голосов
/ 14 декабря 2011

Тип стирания заменит T на Object во время выполнения. Информация о типе будет отсутствовать во время выполнения, поэтому вы не можете проверить тип.

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