cuốn sách gpt4 ai đã làm

Java: Thay thế công tắc bằng lambda. đáng giá?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 23:01:51 28 4
mua khóa gpt4 Nike

Người ta thường sử dụng các khối mã với switch hoặc if khi kiểm tra các sự kiện. Nó có thể là mã sạch nếu được làm đơn giản hơn, nhưng dường như nó vẫn có nhiều dòng hơn mức cần thiết và có thể được đơn giản hóa bằng cách sử dụng lambdas.

Sử dụng if để chặn:

if(hành động == ACTION_1){
doAction1();
} else if(action == ACTION_2){
doAction2();
} khác {
doDefaultAction();
}

Chặn bằng công tắc:

chuyển đổi (hành động) {
trường hợp ACTION_1:
doAction1();
phá vỡ;
trường hợp ACTION_2:
doAction2();
phá vỡ;
default:
doDefaultAction();
}

Sử dụng lớp tiện ích bên dưới Với Sử dụng lambda để chặn:

với (hành động)
.when(ACTION_1, this::doAction1)
.when(ACTION_2, this::doAction2)
.byDefault(this::doDefaultAction)

Sử dụng lambdas ít mã hơn, nhưng câu hỏi đặt ra là: nó có dễ đọc hơn những cái khác không? Dễ bảo trì hơn? Về hiệu suất, lambdas là kém nhất, nhưng đối với những trường hợp hiệu suất không quan trọng, các phiên bản lambdas ngắn hơn khối switch/if.

Vì vậy, bạn nghĩ gì? Có lẽ có một cách Kotlin ngắn hơn thế này, tôi đã cố gắng chỉ tập trung vào Java, tôi thích Kotlin nhưng quá trình biên dịch vẫn quá chậm đối với dự án của tôi.

Các lớp tiện ích tương tự có thể được sử dụng khi một khối phải trả về một giá trị cụ thể.

Cho tôi biết, lớp của lambda ở đây, tôi không kiểm tra lỗi, chỉ làm nhanh cho ví dụ này:

lớp công khai Với {

id cuối cùng riêng tư;
hành động boolean riêng tưFound;

riêng tư Với(T id) {
this.id = id;
}

tĩnh công khai Với với (T id) {
trả về mới Với<>(id);
}

công khai With when(T ExpectId, Hành động hành động) {
if (!actionFound && id == ExpectId) {
actionFound = true;
hành động.execute();
}
return this;
}

public void byDefault(Hành động hành động) {
if (!actionFound) {
hành động.execute();
}
}

@FunctionalInterface
giao diện Hành động {
vô hiệu thực thi();
}
}

câu trả lời hay nhất

Như một cặp vợ chồng đã nói, hãy thay thế công tắc Ít hiệu quả hơn. Tùy thuộc vào trường hợp sử dụng của bạn, việc triển khai của bạn thậm chí có thể có giá trị.

Điều thú vị là Oracle thực sự có kế hoạch công tắc Triển khai lambda trong câu lệnh, chẳng hạn như JEP gần đây này hiển thị trong . .

例子:

Chuỗi được định dạng = switch (s) {
trường hợp null -> "(null)";
trường hợp "" -> "(trống)";
mặc định->s;
}

Giới thiệu về Java: Thay thế switch bằng lambda. đáng giá? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/48585248/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress