Общий метод в Java - PullRequest
       48

Общий метод в Java

0 голосов
/ 27 апреля 2011

Я не знаю, как дать этому лучшее название, так как я не знаю, как этот шаблон называется в Java.

Сейчас у меня есть метод с этой подписью:

public Directory getDirectory(Class<? extends Directory> type) { ... }

И вы называете это так:

MyDirectory directory = (MyDirectory)getDirectory(MyDirectory.class);

Ограничение на тип гарантирует, что MyDirectory должно происходить от Directory.

Что я действительно хочу сделатьэто избежать приведения и уменьшить количество кода, необходимого.В C # вы могли бы сказать:

MyDirectory directory = getDirectory<MyDirectory>();

Есть ли способ сделать это или нечто подобное в Java?Я не кодировал Java с версии 1.4!

Ответы [ 2 ]

11 голосов
/ 27 апреля 2011
public <T extends Directory> T getDirectory(Class<T> type) { ... }

MyDirectory directory = getDirectory(MyDirectory.class);
4 голосов
/ 27 апреля 2011

Ну, вы можете избежать приведения, изменив сам метод на общий:

public <T extends Directory> T getDirectory(Class<T> type)

, а затем:

MyDirectory directory = getDirectory(MyDirectory.class);

Здесь вы используете вывод типа из аргументачтобы определить тип T.

Но вы должны передать Class<T>, так как в противном случае сработает стирание типа, и метод не будет знать тип для создания экземпляра :(

Подробнее о стирании типов и обо всем остальном, что можно сделать с обобщениями Java, см. В FAQ по обобщению Java * Angelka Langer .

...