Когда я должен использовать универсальный параметр и когда я должен использовать родительский класс в качестве параметра - PullRequest
0 голосов
/ 23 декабря 2019

в чем разница между двумя? Когда я должен использовать каждый из них?

Generic:

public static <T extends SomeClass> void doSomething(T class)
{
}

Родительский класс в качестве параметра:

public static void doSomething(SomeClass class)
{
}

1 Ответ

1 голос
/ 23 декабря 2019

Из-за стирания типа оба метода практически одинаковы.

Такой шаблон будет полезен, только если вы return извлекаете экземпляр T из метода. Простым примером будет приведение объекта, хранящегося где-то, к ожидаемому типу (это небезопасно, поскольку мы не проверяем, действительно ли это и является экземпляром T, но это другая история)

public static <T extends SomeClass> T get(String name) {
    return (T) fancyLookup(name)
}

private static Object fancyLookup(String name) { ... }

Итак, чтобы ответить на ваш вопрос:

В чем различия между ними?

Ничего, во время выполнения они эффективно идентичны.

Когда я должен использовать каждый?

Предпочитайте тот, у которого нет универсальных шаблонов, поскольку они одинаковы, и введение универсального кода там, где ничего не нужно, только усложняет ваш код.

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