Generics trong Java – Hướng Dẫn Java

Generics là một chức năng của Java giúp cho lập trình viên có thể chỉ định rõ kiểu dữ liệu mà họ muốn làm việc với một class, một interface hay một phương thức nào đó. Trong bài viết này, chúng ta hãy cùng tìm hiểu thêm về generics trong Java các bạn nhé!

Tại sao lại cần generics?

Trước khi generics được giới thiệu, chúng ta chỉ làm việc với class, interface hay phương thức với một kiểu dữ liệu cố định.

Ví dụ, chúng ta khai báo một đối tượng List như sau:

1

List

l

=

new

ArrayList

(

2

)

;

Với khai báo trên, giả định rằng chúng ta mong muốn chỉ làm việc với đối tượng String. Nhưng bởi vì biến l là một Collection của những đối tượng Object nên chúng ta có thể sử dụng nó với bất kỳ kiểu dữ liệu nào. Khai báo sau sẽ hợp lệ:

1

2

l

.

add

(

“Khanh”

)

;

l

.

add

(

new

Integer

(

1

)

)

;

Điều này sẽ gây nhập nhằng kiểu dữ liệu mà chúng ta muốn làm việc và đôi khi chúng ta cũng không kiểm soát được hết ở thời điểm compile time.

Đó là nguyên nhân của sự cần thiết phải có của generics trong Java. Với generics, chúng ta sẽ chỉ định kiểu dữ liệu mà chúng ta sẽ làm việc ngay thời điểm compile time luôn.

Ví dụ trên có thể viết lại như sau:

1

List

<String>

l

=

new

ArrayList

<String>

(

2

)

;

khi đó, khai báo sau sẽ báo lỗi ngay:

1

l

.

add

(

new

Integer

(

1

)

)

;

Cách tạo một generics class trong Java

Đầu tiên, các bạn hãy cùng mình định nghĩa một non-generics class trước rồi sau đó sẽ chuyển class này qua generics class nhé!

Nội dung của non-generics class như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

package

com

.

huongdanjava

;

 

class

Student

{

private

Object

obj

;

 

public

void

set

(

Object

obj

)

{

this

.

obj

=

obj

;

}

 

public

Object

get

(

)

{

return

obj

;

}

}

Với định nghĩa như thế này, thuộc tính obj của đối tượng Student và tham số obj trong phương thức set() có thể là bất kỳ đối tượng nào. Và nếu 2 đối tượng này là khác nhau, một exception sẽ xảy ra ngay.

Để cố định kiểu dữ liệu cho thuộc tính obj và cả trong phương thức set(), chúng ta sẽ áp dụng generics trong Java. Cụ thể như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

package

com

.

huongdanjava

;

 

class

Student

<T>

{

private

T

obj

;

 

public

void

set

(

T

obj

)

{

this

.

obj

=

obj

;

}

 

public

T

get

(

)

{

return

obj

;

}

}

Sử dụng generics class

Để sử dụng generics class, khi khởi tạo đối tượng, chúng ta sẽ truyền kiểu dữ liệu mà chúng ta muốn vào đối tượng đó.

Lấy ví dụ Student bên trên, chúng ta có thể khởi tạo đối tượng Student cùng với kiểu dữ liệu String như sau:

1

Student

<String>

student

=

new

Student

<String>

(

)

;

Lúc này, chúng ta không thể sử dụng phương thức set() với kiểu dữ liệu khác String, ví dụ:

Generics trong Java