2012-06-04 4 views
8

я создаю универсальный метод без параметров, некоторые вещи, как:Общий метод без параметров

private <T> TableCell<T> createTableCell(){ 
return new TableCell<T>(); 
} 

Так, в моей программе, как назвать этот метод для конкретного типа?

+0

как только вы назовете этот метод, он вернет TableCell типа T, т. Е. T держит тип класса –

+1

Вы имели в виду «return» вместо «Return»? –

+0

Как правило, когда я вызываю этот метод, он возвращает TableCell , но я хочу использовать его в конкретном типе, называемом классами A и B. Итак, как достичь этого? – Thinhbk

ответ

21

Обычно тип выводится, но вы можете указать тип с этим синтаксисом:

Примечание: У вас ошибка в определении вашего метода - он не имел никакого возвращаемого типа:

private <T> TableCell<T> createTableCell(){ 
    return new TableCell<T>(); 
} 

Вот как можно назвать:

TableCell<SomeType> tableCell = myObject.<SomeType>createTableCell(); 


Если метод не имеет доступа ни одного поля, считают что делает его static метамфетамин О.Д., который вы могли бы назвать как:

TableCell<SomeType> tableCell = MyClass.<SomeType>createTableCell(); 


Как и в стороне, когда вы используете этот синтаксис, многие удивятся вашей «элитность» - это синтаксис не часто видел.

+0

да, твой прав. Это моя ошибка. Как бы то ни было, общий метод находится в не-generic классе, и я хочу, чтобы другой метод этого класса вызывал этот общий класс, а не метод другого класса. – Thinhbk

+2

Да. Я также опубликовал правильный ответ. (Другой ответ был отредактирован после публикации моего сообщения - я думаю, он скопировал мой). нм. – Bohemian

+0

Спасибо за ваше объяснение, это помогает мне понять яснее, поскольку синтаксис в определении универсального класса против общего метода заставляет меня запутаться. – Thinhbk

-2

Вы бы назвали этот метод так же, как вы его назвали конструктором внутри него: createTableCell<TypeName>().

+0

К сожалению, он не работает. – Thinhbk

+0

Хм, в этом случае вам придется расширить подпись метода, чтобы включить подсказку типа. Обычный способ сделать это, если у вас действительно нет ничего важного для передачи в метод, является параметр 'Class ', который существует с единственной целью указания типа. Затем вы вызываете метод как «createTableCell (TypeName.class)». – Wormbo

6

Поскольку тип не может быть выведен из контекста (при вызове методы), вы должны указать его при вызове в на следующих путях:

obj.<MyType>createTableCell() 

где obj является объектом класса/типа который содержит этот метод.

+1

Фактически синтаксис равен 'obj. createTableCell() '. – missingfaktor

+0

@missingfaktor да. Благодарю. Я на самом деле пытался это в то же время, потому что я всегда забыл синтаксис в этом случае ... вы были быстрее, чем я. –

+0

@missingfaktor: вы правы. Большое спасибо. – Thinhbk

Смежные вопросы