nói rằng tôi có 2 trường hợp cùng một lớp, nhưng chúng hoạt động khác nhau (theo các đường dẫn mã khác nhau) dựa trên trường boolean cuối cùng được đặt tại thời gian xây dựng. nên cái gì như:các JVM có thể điều chỉnh tối ưu các phiên bản khác nhau của cùng một lớp khác nhau?
public class Foo {
private final boolean flag;
public Foo(boolean flagValue) {
this.flag = flagValue;
}
public void f() {
if (flag) {
doSomething();
} else {
doSomethingElse();
}
}
}
2 trường hợp của Foo
với các giá trị khác nhau cho flag
thể về mặt lý thuyết được hỗ trợ bởi 2 hội khác nhau, do đó loại bỏ các chi phí của if (xin lỗi vì sự dụ giả tạo, nó đơn giản nhất tôi có thể đi lên với).
vì vậy câu hỏi của tôi là - làm bất kỳ JVM nào thực sự thực hiện việc này? hoặc là một lớp duy nhất luôn luôn được hỗ trợ bởi một hội đồng duy nhất?
Những gì bạn mô tả âm thanh rất khủng khiếp như phân lớp, bạn có thể làm rõ lý do tại sao điều đó sẽ không hoạt động? Tôi không thách thức chỉ là cố gắng hiểu ranh giới của vấn đề. – Taylor
Tất cả các trường hợp đều có cùng mã. Câu hỏi của bạn không có ý nghĩa. – EJP
@Taylor Xin lỗi nếu tôi dám giải thích OP, nhưng tôi đoán rằng những gì anh ta/cô ấy hỏi không phải là một mẫu phù hợp (mà rõ ràng là thừa kế), nhưng nếu JVM đủ "thông minh" để loại bỏ việc sử dụng 'flag' biến và tạo ra hai bytecode khác nhau cho toàn bộ lớp (một tương ứng với các nhánh' true', và cái kia cho các 'false'). –