Ý nghĩa của void trong Java: Nó là gì, Khi nào nên dùng và Những lỗi thường gặp

answer.## 1. Kết luận: “java void meaning” thực chất là gì (câu trả lời ngắn nhất)

Trong Java, void là một từ khóa cho biết một phương thức không trả về giá trị.

Tóm lại,

void = một đặc tả dùng để định nghĩa một phương thức không có giá trị trả về

đó là ý chính.

Trong Java, khi bạn định nghĩa một phương thức (một đơn vị xử lý), bạn luôn phải chỉ định một “kiểu trả về”. Nếu không có giá trị trả về, bạn dùng void.

目次

1.1 Ý nghĩa cơ bản của void

Một định nghĩa phương thức Java trông như sau:

modifier return-type methodName(arguments) {
    // processing;
}

Nếu không có giá trị trả về, viết void ở vị trí kiểu.

public void greet() {
    System.out.println("Hello");
}

Trong ví dụ này:

  • public → bộ điều chỉnh truy cập (có thể gọi từ bên ngoài)
  • void → không có giá trị trả về
  • greet() → tên phương thức
  • System.out.println() → in ra console

Phương thức greet() này thực hiện công việc, nhưng không trả về giá trị nào.

1.2 “Không có giá trị trả về” thực sự có nghĩa là gì

Giá trị trả về là “một giá trị được truyền lại cho người gọi như là kết quả của quá trình xử lý của phương thức.”

Ví dụ: khi có giá trị trả về

public int add(int a, int b) {
    return a + b;
}

Phương thức này trả về một giá trị kiểu int.

Ngược lại, một phương thức void:

  • không trả về giá trị nào
  • không thể được người gọi nhận
  • không thể được gán
    int result = greet(); // compile error
    

Câu trên sẽ gây lỗi. Lý do: greet() không trả về giá trị, vì vậy không thể gán.

1.3 Những điểm thường gây nhầm lẫn cho người mới bắt đầu

❌ Nhầm lẫn 1: “void = không làm gì cả”

Không. void chỉ có nghĩa là “không trả về giá trị”; quá trình xử lý vẫn diễn ra.

❌ Nhầm lẫn 2: “void là một kiểu dữ liệu”

Nói một cách chính xác, nó khác với các kiểu dữ liệu thông thường (như int hay String). void là một “từ khóa đặc biệt để chỉ định kiểu trả về.”

❌ Nhầm lẫn 3: “Bạn không thể dùng return”

Ngay cả trong một phương thức void, bạn vẫn có thể viết:

public void check(int x) {
    if (x < 0) {
        return;
    }
    System.out.println(x);
}

return; có nghĩa là “kết thúc phương thức”. Tuy nhiên, bạn không thể viết return value;.

1.4 Những điểm chính (hiểu nhanh nhất)

  • void có nghĩa là “không có giá trị trả về”
  • Bạn phải chỉ định nó trong định nghĩa phương thức khi không có giá trị trả về
  • Nó không trả về giá trị, nhưng quá trình xử lý vẫn diễn ra
  • Bạn không thể gán kết quả của nó
  • return; được phép (không có giá trị)

2. Bạn dùng void ở đâu? Cú pháp cơ bản và quy tắc ngữ pháp

Bạn dùng void như là kiểu trả về trong khai báo phương thức. Trong Java, mọi phương thức đều phải khai báo rõ ràng một “kiểu trả về”. Chỉ khi không có giá trị trả về, bạn mới chỉ định void.

2.1 Cú pháp khai báo phương thức cơ bản

Dạng cơ bản là:

[modifier] return-type methodName(parameterList) {
    // processing;
}

Ví dụ (có giá trị trả về):

public int multiply(int a, int b) {
    return a * b;
}

Ví dụ (không có giá trị trả về = void):

public void printMessage(String message) {
    System.out.println(message);
}

Các điểm cần lưu ý:

  • int → trả về kết quả tính toán
  • void → không trả về gì
  • Bạn không thể bỏ qua kiểu (phải được chỉ định)

2.2 Cách sử dụng phương thức void đúng

Sử dụng void trong các trường hợp sau:

  • hiển thị đầu ra
  • ghi log
  • cập nhật dữ liệu
  • thay đổi trạng thái

Ví dụ:

public void updateCount() {
    count++;
}

Phương thức này cập nhật một biến nội bộ, nhưng không trả về giá trị nào.

Cách gọi nó:

updateCount(); // call it by itself

Vì không có giá trị trả về, bạn không thể gán nó cho một biến.

2.3 Sự khác biệt rõ ràng so với các phương thức có giá trị trả về

So sánh song song sẽ làm rõ hơn.

Có giá trị trả về

public int square(int x) {
    return x * x;
}

Gọi:

int result = square(5);

Không có giá trị trả về (void)

public void showSquare(int x) {
    System.out.println(x * x);
}

Gọi:

showSquare(5);

Sự khác biệt:

  • Có giá trị trả về → bạn có thể tái sử dụng kết quả đã tính toán
  • void → nó chỉ thực hiện hành động ngay tại chỗ

2.4 Các lỗi cú pháp phổ biến

❌ Quên viết kiểu trả về

public greet() {  // error
}

Trong Java, bạn phải luôn chỉ định một kiểu.

❌ Trả về một giá trị từ phương thức void

public void test() {
    return 10; // compile error
}

Lý do lỗi: một phương thức void không thể trả về giá trị.

❌ Cố gắng gán lời gọi phương thức void

int x = showSquare(5); // error

Bạn không thể gán nó vì không có giá trị trả về.

2.5 Các lỗi thiết kế mà người mới thường mắc phải

  • Làm mọi thứ thành void “tạm thời”
  • Sử dụng void cho phương thức nên trả về giá trị
  • Kết thúc với thiết kế không thể tái sử dụng

Hướng dẫn thiết kế:

  • Nếu bạn sẽ sử dụng kết quả ở nơi khác → sử dụng giá trị trả về
  • Nếu công việc hoàn thành “ngay tại đó” → sử dụng void

3. Hiểu đúng về void và return

Để hiểu void, mối quan hệ của nó với return là cực kỳ quan trọng.
Nhiều người mới bị nhầm lẫn bởi câu hỏi: “Tại sao bạn có thể sử dụng return mặc dù nó là void?”

Ở đây, chúng ta sẽ sắp xếp vai trò thực sự của return.

3.1 Các vai trò thiết yếu của return

return có hai ý nghĩa.

  1. Trả về một giá trị cho người gọi
  2. Kết thúc việc thực thi phương thức

Trong các phương thức có giá trị trả về, cả hai xảy ra cùng lúc.

public int add(int a, int b) {
    return a + b;  // return a value + end execution
}

Trong phương thức void, bạn không thể “trả về một giá trị,” nhưng
bạn vẫn có thể sử dụng return cho vai trò “kết thúc thực thi.”

3.2 Cách sử dụng return bên trong phương thức void

Ví dụ:

public void checkNumber(int x) {
    if (x < 0) {
        System.out.println("It is a negative number");
        return;  // end execution here
    }
    System.out.println("It is a positive number or 0");
}

Các điểm chính:

  • return; không bao gồm giá trị
  • Nó được sử dụng để dừng phương thức sớm

3.3 Tại sao chỉ cho phép return;?

Trong đặc tả Java, phương thức void được định nghĩa là “không có giá trị trả về.”

Điều đó có nghĩa là:

  • return value; → không được phép
  • return; → được phép

Tại sao?

Vì bản chất của return là “một chỉ thị để kết thúc thực thi.”
Một return không có giá trị chỉ được coi đơn giản là một câu lệnh điều khiển.

3.4 Các lỗi phổ biến và sự nhầm lẫn

❌ Trả về một giá trị mặc dù nó là void

public void sample() {
    return 5;  // compile error
}

Thông báo lỗi:

incompatible types: unexpected return value

Lý do:
Vì phương thức void không thể trả về giá trị theo thiết kế.

❌ Quên return trong phương thức có giá trị trả về

public int test(int x) {
    if (x > 0) {
        return x;
    }
    // no return here → error
}

Thông báo lỗi:

missing return statement

Nếu bạn chỉ định kiểu trả về, bạn phải trả về một giá trị trên mọi đường dẫn.

3.5 Các điểm chính mà người mới nên hiểu

  • return không chỉ là “trả về một giá trị”
  • Ngay cả trong phương thức void, return; có thể được sử dụng
  • Khi trả về giá trị, kiểu phải khớp
  • Nếu bạn chỉ định kiểu trả về, bạn phải trả về giá trị

3.6 Tiêu chí quyết định từ góc nhìn thiết kế

Suy nghĩ theo các thuật ngữ này để tránh nhầm lẫn:

  • Tái sử dụng kết quả → sử dụng giá trị trả về
  • Chỉ thực hiện công việc → sử dụng void
  • Muốn thoát sớm dựa trên điều kiện → sử dụng return; ngay cả trong phương thức void

4. Tại sao void lại cần thiết? Ý nghĩa thiết kế của nó

void không chỉ là một ký hiệu cú pháp.
Nó là một đặc tả được sử dụng để làm rõ vai trò thiết kế.

Nếu bạn không hiểu điều này, bạn có thể rơi vào tư duy thiết kế xấu như “Mọi thứ có phải đều ổn với void không?”

4.1 Những loại công việc nào không cần giá trị trả về?

Các sử dụng điển hình của void là các trường hợp mà hành động chính là mục tiêu.

Các ví dụ phổ biến:

  • hiển thị đầu ra
  • ghi log
  • ghi vào tệp
  • cập nhật cơ sở dữ liệu
  • thay đổi trạng thái

Ví dụ:

public void logMessage(String message) {
    System.out.println("LOG: " + message);
}

Mục đích của phương thức này là xuất ra một thông điệp log.
Không cần trả về giá trị nào.

4.2 Khái niệm “hiệu ứng phụ”

Ý tưởng chính ở đây là hiệu ứng phụ.

Một hiệu ứng phụ có nghĩa là:

Thay đổi trạng thái bên ngoài phương thức

Ví dụ:

int count = 0;

public void increment() {
    count++;
}

Phương thức này không trả về giá trị, nhưng nó thay đổi một biến bên ngoài count.

Đó là một hiệu ứng phụ.

4.3 Sự khác biệt thiết kế so với các phương thức trả về giá trị

Một so sánh sẽ làm rõ điều này.

Với giá trị trả về (tính toán thuần túy)

public int add(int a, int b) {
    return a + b;
}
  • Không thay đổi trạng thái
  • Mối quan hệ đầu vào → đầu ra rõ ràng
  • Dễ kiểm thử

void (có hiệu ứng phụ)

public void updateUser(User user) {
    user.setActive(true);
}
  • Thay đổi trạng thái
  • Không trả về kết quả dưới dạng giá trị

4.4 Khi nào nên sử dụng void

void phù hợp khi:

  • Bạn sẽ không tái sử dụng kết quả
  • Hoàn thành hành động là mục tiêu
  • Cập nhật trạng thái là trọng tâm chính
  • Xử lý kiểu thủ tục

Ngược lại, bạn nên cân nhắc trả về giá trị nếu:

  • Bạn sẽ sử dụng kết quả tính toán ở nơi khác
  • Bạn muốn xác định thành công/thất bại
  • Bạn muốn cải thiện khả năng kiểm thử

4.5 Những sai lầm thiết kế mà người mới thường mắc phải

❌ Biến nó thành void “tạm thời”

Nếu bạn làm một phương thức thành void khi thực sự cần trả về giá trị:

  • Nó không thể được tái sử dụng
  • Nó trở nên khó kiểm thử hơn
  • Độ đọc hiểu giảm sút

❌ Không trả về thành công/thất bại

Ví dụ:

public void saveData(Data d) {
    // save processing
}

Nếu việc lưu thất bại?
→ Bạn nên cân nhắc trả về một boolean hoặc sử dụng ngoại lệ.

4.6 Tóm tắt các tiêu chí quyết định thiết kế

Hướng dẫn nhanh:

  • Tái sử dụng kết quả → sử dụng giá trị trả về
  • Chỉ thay đổi trạng thái → sử dụng void
  • Cần xác định thành công/thất bại → trả về boolean hoặc ném ngoại lệ

Điều quan trọng là phải hiểu rằng void không chỉ có nghĩa là “không có giá trị trả về,” mà còn
đóng vai trò là một tuyên bố về ý định thiết kế.

5. Tại sao phương thức main lại là void

Khi bạn bắt đầu học Java, đoạn mã đầu tiên bạn luôn thấy là:

public static void main(String[] args) {
    System.out.println("Hello World");
}

Tại thời điểm này, một câu hỏi phổ biến là:

  • Tại sao main được khai báo là void ?
  • Tại sao nó không phải là int ?

Trong phần này, chúng ta sẽ sắp xếp mối quan hệ của nó với JVM (Java Virtual Machine).

5.1 Vai trò của phương thức main

Phương thức main là điểm vào của một chương trình Java.

Khi bạn chạy một chương trình Java:

  1. JVM tải lớp
  2. Nó tìm phương thức main trong lớp được chỉ định
  3. Nó gọi và thực thi main

Nói cách khác, main là một phương thức đặc biệt được gọi đầu tiên.

5.2 Tại sao không cần giá trị trả về

Mục đích của main là “bắt đầu thực thi.”

Trong thiết kế của Java:

  • JVM không nhận giá trị trả về từ main
  • Mã thoát được xử lý qua một cơ chế riêng

Vì lý do đó, kiểu trả về là void.

5.3 Mã thoát được xử lý như thế nào?

Trong C, int main() thường gặp.
Trong Java, tuy nhiên, nếu bạn muốn trả về một mã thoát, bạn sử dụng phương thức sau:

System.exit(0);

Ví dụ:

public static void main(String[] args) {
    if (args.length == 0) {
        System.exit(1);
    }
}
  • 0 → kết thúc bình thường
  • Không phải 0 → kết thúc bất thường (theo quy ước)

Nói cách khác, mã thoát không được kiểm soát bằng return,
mà bằng System.exit().

5.4 Lý do kỹ thuật khiến main phải là void

Đặc tả Java định nghĩa điểm vào là:

public static void main(String[] args)

Yêu cầu:

  • public
  • static
  • void
  • Đối số phải là một mảng String

Nếu chữ ký này không khớp chính xác, JVM sẽ không nhận diện nó là điểm vào.

5.5 Những hiểu lầm và sai lầm phổ biến

❌ Thay đổi kiểu trả về của main thành int

.

public static int main(String[] args) {
    return 0;  // error
}

JVM sẽ không nhận ra nó là điểm vào.

❌ Quên static

public void main(String[] args) { }

Nếu nó không phải là static, sẽ cần một thể hiện, và không thể được thực thi như điểm vào.

5.6 Các điểm chính

  • main là điểm bắt đầu của chương trình
  • JVM không nhận giá trị trả về
  • Mã thoát được chỉ định bằng System.exit()
  • Chữ ký của main được định nghĩa một cách nghiêm ngặt

Lý do main là void là một phần của đặc tả mô hình thực thi,
không chỉ là một ràng buộc cú pháp.

6. Sự khác nhau giữa void và các kiểu khác (tránh nhầm lẫn với null và Optional)

void có nghĩa là “không có giá trị trả về,” nhưng người mới thường nhầm lẫn nó với null hoặc Optional.
Ở đây, chúng tôi giải thích rõ ràng các khác biệt.

6.1 void và null hoàn toàn khác nhau

Đầu tiên, kết luận:

  • void → không tồn tại giá trị
  • null → một giá trị đại diện cho “không có đối tượng”

null là một giá trị đặc biệt có thể được gán cho các biến thuộc kiểu tham chiếu (kiểu lớp).

Ví dụ:

String name = null;

Trong trường hợp này, “một giá trị tồn tại, nhưng nội dung của nó không có.”

Ngược lại, void không thể được gán dưới bất kỳ hình thức nào.

void x;  // compile error

void không thể được sử dụng làm kiểu biến.
Nó chỉ dành riêng để chỉ định kiểu trả về của một phương thức.

6.2 Sự khác nhau giữa “không có giá trị trả về” và trả về null

Ví dụ so sánh:

phương thức void

public void process() {
    System.out.println("Executed");
}

→ Không trả về gì.

Phương thức trả về null

public String getName() {
    return null;
}

→ Trả về null dưới dạng giá trị String.

Sự khác biệt quan trọng:

  • void → không thể được người gọi nhận
  • null → có thể được nhận, nhưng không chứa đối tượng

6.3 Sự khác nhau so với Optional

Optional là một lớp được sử dụng để biểu diễn một cách an toàn rằng một giá trị “có thể tồn tại hoặc không tồn tại.”

Ví dụ:

import java.util.Optional;

public Optional<String> findUser() {
    return Optional.empty();
}

Sự khác biệt:

  • void → được thiết kế để không trả về giá trị nào
  • Optional → được thiết kế để trả về giá trị, nhưng tính đến khả năng không có giá trị

Tiêu chí quyết định thiết kế:

  • Không cần giá trị → void
  • Có thể có giá trị → Optional
  • Giá trị luôn cần thiết → kiểu trả về thông thường

6.4 Các lỗi thiết kế thường gặp

❌ “Chỉ làm nó void tạm thời”

Nếu bạn sử dụng void khi kết quả nên được trả về:

  • Người gọi không thể sử dụng kết quả
  • Khả năng mở rộng giảm

❌ Lạm dụng null

public String find() {
    return null;  // often causes bugs
}

Nếu bạn quên kiểm tra null, bạn có thể gặp NullPointerException.

6.5 Tóm tắt các tiêu chí quyết định

  • Kết quả tự nó không cần thiết → void
  • Kết quả tồn tại nhưng có thể không có → Optional
  • Kết quả là bắt buộc → kiểu trả về thông thường
  • null là một loại giá trị và không liên quan đến void

void là một lựa chọn thiết kế có nghĩa “không trả về giá trị,”
trong khi null và Optional là các lựa chọn thiết kế về “cách xử lý giá trị.”

7. Các lỗi thường gặp và cách khắc phục

Hiểu sai về void thường dẫn trực tiếp đến lỗi biên dịch và các sai lầm thiết kế.
Ở đây, chúng tôi tổng hợp các lỗi phổ biến mà người mới gặp phải, cùng với nguyên nhân và giải pháp.

7.1 lỗi không tương thích kiểu

Ví dụ điển hình:

public void greet() {
    System.out.println("Hello");
}

int result = greet();  // error

Thông báo lỗi ví dụ:

incompatible types: void cannot be converted to int

Nguyên nhân:

  • Một phương thức void không trả về giá trị
  • Bạn đang cố gắng gán nó vào một biến

Giải pháp:

  • Loại bỏ việc gán
  • Hoặc thay đổi kiểu trả về thành kiểu có giá trị trả về

Ví dụ đã sửa:

public String greet() {
    return "Hello";
}

String result = greet();

7.2 lỗi giá trị trả về không mong đợi

Ví dụ:

public void test() {
    return 5;  // error
}

Thông báo lỗi:

unexpected return value

Nguyên nhân:

  • Bạn đang trả về một giá trị từ một phương thức void

Giải pháp:

  • Nếu bạn không cần trả về giá trị → sử dụng return;
  • Nếu bạn muốn trả về giá trị → thay đổi kiểu trả về

Ví dụ đã sửa:

public int test() {
    return 5;
}

7.3 lỗi thiếu câu lệnh return

Ví dụ:

public int check(int x) {
    if (x > 0) {
        return x;
    }
}

Lỗi:

missing return statement

Nguyên nhân:

  • Bạn đã chỉ định kiểu trả về nhưng không trả về giá trị trên tất cả các nhánh

Giải pháp:

  • Thêm câu lệnh return cho mọi nhánh

Ví dụ đã sửa:

public int check(int x) {
    if (x > 0) {
        return x;
    } else {
        return 0;
    }
}

7.4 Các lỗi thiết kế phổ biến

❌ Làm cho một phương thức tính toán thành void

public void add(int a, int b) {
    System.out.println(a + b);
}

Vấn đề:

  • Bạn không thể tái sử dụng kết quả
  • Khó kiểm thử hơn

Cải thiện:

public int add(int a, int b) {
    return a + b;
}

❌ Không trả về thành công/thất bại

public void save() {
    // save processing
}

Vấn đề:

  • Bạn không biết liệu nó có thành công hay không

Cải thiện:

public boolean save() {
    return true; // in practice, return based on actual result
}

7.5 Danh sách kiểm tra để tránh lỗi

  • Kiểu trả về có khớp với kiểu trong câu lệnh return không?
  • Bạn có đang gán một lời gọi phương thức void không?
  • Tất cả các đường dẫn thực thi có trả về giá trị khi kiểu trả về được chỉ định không?
  • Bạn đã xem xét liệu void có thực sự phù hợp không?

7.6 Tóm tắt chính

  • Một phương thức void không thể được gán
  • Return trả về giá trị phải khớp với kiểu đã khai báo
  • Nếu kiểu trả về được khai báo, câu lệnh return là bắt buộc
  • Việc đánh giá tính phù hợp của void ở giai đoạn thiết kế là quan trọng

8. Tóm tắt (Các điểm chính mà người mới bắt đầu phải hiểu)

Đây là bản tóm tắt ngắn gọn nhất của mọi thứ đã giải thích cho đến nay cho ý định tìm kiếm “java void meaning.”

8.1 Bản chất của void

  • void là một từ khóa nghĩa là “không có giá trị trả về”
  • Bạn phải luôn chỉ định kiểu trả về khi định nghĩa một phương thức
  • Nó không trả về giá trị, nhưng phương thức vẫn thực thi

Ví dụ:

public void showMessage() {
    System.out.println("This will execute");
}

8.2 Mối quan hệ với return

  • Ngay cả trong các phương thức void, return; được phép (để kết thúc thực thi)
  • return value; không được phép
  • Nếu bạn khai báo kiểu trả về, mọi nhánh phải trả về giá trị

8.3 Tại sao main là void

  • JVM không nhận giá trị trả về
  • Mã thoát sử dụng System.exit()
  • Chữ ký của main được quy định cố định bởi đặc tả

8.4 Sự khác biệt với null và Optional

  • void → không có giá trị tồn tại
  • null → một giá trị đại diện cho sự vắng mặt của một đối tượng
  • Optional → một cơ chế để đại diện an toàn cho sự vắng mặt có thể xảy ra của một giá trị

Đừng nhầm lẫn chúng.

8.5 Tiêu chí quyết định thiết kế

Hãy suy nghĩ bằng các hướng dẫn này:

  • Tái sử dụng kết quả → sử dụng giá trị trả về
  • Chỉ thực hiện hành động → sử dụng void
  • Cần biết thành công/thất bại → sử dụng boolean hoặc ngoại lệ
  • Giá trị có thể vắng mặt → sử dụng Optional

8.6 Danh sách kiểm tra quan trọng nhất

  • Một phương thức void không thể được gán
  • Kiểu trả về không thể bị bỏ qua
  • Kiểu giá trị trả về phải khớp
  • Tránh sử dụng void “chỉ vì”

9. Câu hỏi thường gặp (FAQ)

9.1 Void có phải là một kiểu dữ liệu không?

Chính sách trả lời:
Nó khác với các kiểu dữ liệu thông thường (như int hoặc String).
void là một từ khóa đặc biệt chỉ ra rằng một phương thức không trả về giá trị, và nó không thể được sử dụng như một kiểu biến.

9.2 Một phương thức void có thể trả về giá trị không?

Chính sách trả lời:
Không, không trực tiếp.
Nếu bạn muốn trả về giá trị, bạn phải thay đổi kiểu trả về thành int, String, v.v. Quyết định này nên được thực hiện ở giai đoạn thiết kế.

9.3 Void và null có giống nhau không?

.Chính sách trả lời:
Chúng hoàn toàn khác nhau.
null là một giá trị đại diện cho việc không có đối tượng, trong khi void là một đặc tả thiết kế có nghĩa là “không có giá trị trả về.”
null có thể được gán, nhưng void không thể.

9.4 Có bắt buộc phải return trong một phương thức void không?

Chính sách trả lời:
Không bắt buộc.
Tuy nhiên, nếu bạn muốn thoát khỏi phương thức sớm, bạn có thể sử dụng return;.
Bạn không thể sử dụng return kèm giá trị.

9.5 Tại sao phương thức main lại là void?

Chính sách trả lời:
Bởi vì môi trường thực thi Java (JVM) không nhận giá trị trả về.
Nếu bạn muốn chỉ định mã thoát, hãy sử dụng System.exit().

9.6 Nếu tôi không sử dụng giá trị trả về, mọi thứ có thể là void không?

Chính sách trả lời:
Không được khuyến nghị.
Nếu có bất kỳ khả năng nào kết quả có thể được tái sử dụng trong tương lai, nó nên được đưa vào thiết kế dưới dạng giá trị trả về.
Tính khả thi kiểm thử và khả năng mở rộng cũng nên được cân nhắc.

9.7 Void có thể được dùng làm kiểu lớp hoặc biến không?

Chính sách trả lời:
Không, không thể.
void chỉ dành riêng cho việc chỉ định kiểu trả về của một phương thức.

9.8 Tôi nên chọn void hay Optional như thế nào?

Chính sách trả lời:

  • Nếu thiết kế không trả về giá trị → void
  • Nếu một giá trị có thể tồn tại hoặc không tồn tại → Optional

Mục đích thiết kế cơ bản là khác nhau.