Toán tử instanceof trong Java – Hướng Dẫn Java

Toán tử instanceof trong Java là một toán tử được sử dụng để kiểm tra xem đối tượng này có phải là instance của một class hay interface nào đó hay không? Kết quả trả về của toán tử này sẽ là true nếu đối tượng đó là thể hiện của class mà các bạn đang check, ngược lại thì false.

Ví dụ, mình có một class Application như sau:

1

2

3

4

5

6

7

8

9

10

package

com

.

huongdanjava

.

java

;

 

public

class

Application

{

 

public

static

void

main

(

String

[

]

args

)

{

Application

application

=

new

Application

(

)

;

System

.

out

.

println

(

application

instanceof

Application

)

;

}

 

}

Trong hàm main() của class này, mình initialize một đối tượng của class Application và sử dụng toán tử instanceof để kiểm tra xem đối tượng này có phải là instance của class Application này hay không? Các bạn sẽ thấy kết quả sẽ như sau:

Toán tử instanceof trong Java

Nếu các bạn viết code như sau:

1

2

3

4

5

6

7

8

9

10

package

com

.

huongdanjava

.

java

;

 

public

class

Application

{

 

public

static

void

main

(

String

[

]

args

)

{

Application

application

=

new

Application

(

)

;

System

.

out

.

println

(

application

instanceof

String

)

;

}

 

}

thì IDE sẽ báo lỗi ngay:

Toán tử instanceof trong Java

Đây là trong trường hợp quá tường minh, quá rõ ràng, IDE có thể báo lỗi cho các bạn biết ngay.

Nhưng nếu bạn có một interface với hai implementation như sau:

1

2

3

4

5

package

com

.

huongdanjava

.

java

;

 

public

interface

Shape

{

 

}

1

2

3

4

5

package

com

.

huongdanjava

.

java

;

 

public

class

Triangle

implements

Shape

{

 

}

1

2

3

4

5

package

com

.

huongdanjava

.

java

;

 

public

class

Rectangle

implements

Shape

{

 

}

thì lúc này nếu các bạn initialize đối tượng của class Triangle nhưng lại đi kiểm tra đối tượng này có phải là thể hiện của class Rectangle,

1

2

3

4

5

6

7

8

9

10

11

package

com

.

huongdanjava

.

java

;

 

public

class

Application

{

 

public

static

void

main

(

String

[

]

args

)

{

Shape

shape

=

new

Triangle

(

)

;

System

.

out

.

println

(

shape

instanceof

Rectangle

)

;

}

 

}

IDE sẽ không thể detect lỗi lúc compile time nhưng khi chạy các bạn sẽ thấy kết quả như sau:

Toán tử instanceof trong Java

Chúng ta sẽ thường sử dụng toán tử instanceof trong trường hợp kiểm tra xem tham số truyền vào của một phương thức có phải là instance của một class nào đó hay không? Ví dụ như:

1

2

3

4

5

6

7

private

void

check

(

Shape

shape

)

{

    

if

(

shape

instanceof

Triangle

)

{

        

Triangle

triangle

=

(

Triangle

)

shape

;

        

        

System

.

out

.

println

(

“This is triangle: “

+

triangle

.

toString

(

)

)

;

    

}

}

Trong phương thức trên, tham số interface Shape có nhiều implementation khác nhau, trong phần body của phương thức, chúng ta sẽ check xem là instance được truyền vào phương thức này có phải là Triangle hay không? Nếu đúng thì xử lý code tiếp.

Kết quả:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package

com

.

huongdanjava

.

java

;

 

public

class

Application

{

private

void

check

(

Shape

shape

)

{

if

(

shape

instanceof

Triangle

)

{

Triangle

triangle

=

(

Triangle

)

shape

;

System

.

out

.

println

(

“This is triangle: “

+

triangle

.

toString

(

)

)

;

}

}

 

public

static

void

main

(

String

[

]

args

)

{

Application

application

=

new

Application

(

)

;

application

.

check

(

new

Triangle

(

)

)

;

}

 

}

Toán tử instanceof trong Java

Từ Java 14, các bạn có thể viết lại phương thức check() sử dụng pattern matching instanceof, đơn giản như sau:

1

2

3

4

5

private

void

check

(

Shape

shape

)

{

    

if

(

shape

instanceof

Triangle

triangle

)

{

        

System

.

out

.

println

(

“This is triangle: “

+

triangle

.

toString

(

)

)

;

    

}

}

Với cách viết mới, chúng ta không cần viết thêm một dòng code để cast instance về đối tượng mà chúng ta muốn nữa. Tất cả sẽ được thực hiện trong dòng lệnh if.

Kết quả vẫn như vậy:

Toán tử instanceof trong Java