CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Mục lục

Trang chủBlogLỗi Java Ambiguous Method...
Java

Lỗi Java Ambiguous Method Call: Nguyên nhân và cách khắc phục chi tiết

3 phút đọc15/09/2025
CyStack Author
Chris Pham

Technical Writer

0 lượt xem
Reading Time: 3 minutes

Trong quá trình lập trình Java, bạn có thể gặp lỗi ambiguous method call khi biên dịch. Đây là tình huống xảy ra khi trình biên dịch không thể xác định phương thức nào cần được gọi do sự trùng lặp hoặc mơ hồ trong khai báo.

Bài viết này sẽ giúp bạn hiểu rõ nguyên nhân, ví dụ minh họa và cách khắc phục hiệu quả.

Lỗi Java Ambiguous Method Call

Nguyên nhân xảy ra lôi Java ambiguous method call

Ở đây, tôi sẽ giải thích vì sao lỗi java ambiguous method call xảy ra kèm với một số ví dụ. Lỗi ambiguous method call này luôn xuất hiện trong trường hợp method overloading, khi compiler không thể xác định được phương thức overload nào nên được sử dụng. Giả sử chúng ta có một chương trình Java như dưới đây.

package com.journaldev.errors;

public class Test {

	public void foo(Object o) {
		System.out.println("Object");
	}

	public void foo(String s) {
		System.out.println("String");
	}
	public static void main(String[] args) {
		new Test().foo(null);
	}

}

Chương trình trên biên dịch hoàn toàn bình thường và khi chạy, nó in ra “String”. Như vậy, phương thức foo(String s) đã được gọi. Lý do là bởi java compiler sẽ cố gắng tìm phương thức có tham số đầu vào cụ thể nhất để thực thi. Ta biết rằng Object là lớp cha của String, nên lựa chọn này khá rõ ràng. Dưới đây là trích dẫn từ Java Language Specification:

Lý do tôi truyền “null” là vì giá trị này có thể phù hợp với bất kỳ kiểu tham số nào. Nếu ta truyền một object cụ thể, compiler của Java sẽ dễ dàng xác định được phương thức nào cần gọi.

The method X is ambiguous for the type Y

Bây giờ, hãy thêm phương thức dưới đây vào đoạn code trên.

public void foo(Integer i){
	System.out.println("Integer");
}

the method is ambiguous for the type java error

Bạn sẽ gặp lỗi compile time error như sau: The method foo(Object) is ambiguous for the type Test, vì cả lớp String và Integer đều có lớp cha là Object và không có quan hệ kế thừa với nhau. Do đó, compiler của Java không coi phương thức nào cụ thể hơn, dẫn đến lỗi ambiguous method call.

package com.journaldev.strings;

public class Test {

	public void foo(Object o) {
		System.out.println("Object");
	}

	public void foo(Exception e) {
		System.out.println("Exception");
	}

	public void foo(NullPointerException ne) {
		System.out.println("NullPointerException");
	}

	public static void main(String[] args) {
		new Test().foo(null);
	}

}

Như đã giải thích ở trên, trong trường hợp này foo(NullPointerException ne) là phương thức cụ thể nhất vì nó được kế thừa từ lớp Exception, do đó đoạn code này biên dịch bình thường và khi chạy sẽ in ra “NullPointerException”.

Tôi hy vọng bài viết này đã làm rõ mọi thắc mắc của bạn về lỗi java ambiguous method call compiler error, vui lòng để lại bình luận nếu bạn muốn bổ sung điều gì hoặc vẫn còn chỗ chưa rõ.

Về tác giả

Chris Pham
Chris PhamTechnical Writer

I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.

Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn

Thảo luận (0)

Đăng nhập để thảo luận

Bài viết liên quan