2012-06-04 42 views
8

tôi tạo ra một phương pháp chung chung mà không tham số, một số điều như:phương pháp Generic không có tham số

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

Vì vậy, trong chương trình của tôi, làm thế nào để gọi phương pháp này cho một loại bê tông?

+0

một khi bạn sẽ gọi phương thức này, nó sẽ trả về TableCell of Type T tức là T giữ loại của lớp –

+1

Ý của bạn là "return" thay vì "Return"? –

+0

Nói chung, khi tôi gọi phương thức này, nó sẽ trả về TableCell , nhưng tôi muốn đúc nó thành một loại cụ thể, được gọi là Class A và B. Vậy làm thế nào để đạt được điều này? – Thinhbk

Trả lời

21

Thông thường, các loại là suy ra, nhưng bạn có thể chỉ định các loại với cú pháp này:

Lưu ý: Bạn có một lỗi trong định nghĩa của phương pháp của bạn - nó không có kiểu trả về:

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

Dưới đây là làm thế nào bạn có thể gọi nó là:

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


Nếu bạn phương pháp không truy cập vào bất kỳ lĩnh vực, hãy xem xét làm cho nó một meth static od, mà bạn sẽ gọi như:

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


Là một sang một bên, khi bạn sử dụng cú pháp này, nhiều người sẽ ngạc nhiên trước "eliteness" của bạn - đó là một cú pháp không thường thấy.

+0

vâng, bạn đang đúng. Đây là lỗi của tôi. Dù sao, phương pháp chung là trong một lớp không chung chung, và tôi muốn phương pháp khác của lớp này gọi lớp chung này, không phải phương pháp của lớp khác. – Thinhbk

+2

Có. Tôi cũng đã đăng câu trả lời đúng trước. (Câu trả lời khác đã được chỉnh sửa sau khi tôi đã được đăng - Tôi nghĩ rằng ông đã sao chép của tôi). nm. – Bohemian

+0

Cảm ơn bạn đã giải thích, nó giúp tôi hiểu rõ hơn, như cú pháp trong việc xác định generic class vs generic method làm cho tôi bối rối. – Thinhbk

-2

Bạn sẽ gọi phương thức này giống như cách bạn gọi hàm tạo bên trong nó: createTableCell<TypeName>().

+0

tiếc là nó không hoạt động. – Thinhbk

+0

Hmm, trong trường hợp đó bạn sẽ phải mở rộng chữ ký phương thức để bao gồm gợi ý loại. Cách thông thường để làm điều đó nếu bạn không thực sự có bất cứ điều gì có liên quan để chuyển vào phương thức là tham số 'Class ' tồn tại cho mục đích duy nhất là chỉ định kiểu. Sau đó bạn sẽ gọi phương thức là 'createTableCell (TypeName.class)'. – Wormbo

6

Bởi vì loại không thể được suy ra từ ngữ cảnh (khi bạn gọi phương thức), bạn phải xác định nó khi gọi theo cách folowing:

obj.<MyType>createTableCell() 

nơi obj là đối tượng của một lớp/loại có chứa phương pháp đó.

+1

Thực ra cú pháp là 'obj. createTableCell() '. – missingfaktor

+0

@missingfaktor yes. cảm ơn. Tôi đã thực sự cố gắng nó trong khi chờ đợi bởi vì tôi luôn luôn quên cú pháp trong trường hợp đó ... bạn đã nhanh hơn tôi –

+0

@missingfaktor: bạn nói đúng. Cảm ơn rất nhiều. – Thinhbk

Các vấn đề liên quan