Chỉ cần đọc trên trang web dev:Android Performance - 'Tránh nội Getters/setters'
Avoid Internal Getters/Setters
Trong các ngôn ngữ bản địa như C++ đó là thực tế phổ biến để sử dụng thu khí (ví dụ i = getCount()) thay vì truy cập trực tiếp vào trường (i = mCount). Đây là một thói quen tuyệt vời cho C++, vì trình biên dịch thường có thể truy cập nội tuyến và nếu bạn cần hạn chế hoặc gỡ lỗi truy cập trường, bạn có thể thêm mã bất kỳ lúc nào.
Trên Android, đây là một ý tưởng tồi. Các cuộc gọi phương thức ảo đắt tiền, nhiều hơn so với các lần tra cứu trường mẫu. Đó là hợp lý để làm theo thực hành lập trình hướng đối tượng phổ biến và có getters và setters trong giao diện công cộng, nhưng trong một lớp học, bạn nên luôn luôn truy cập trực tiếp các lĩnh vực.
Nếu không có JIT, truy cập trực tiếp trường nhanh hơn khoảng 3x so với gọi trình thu thập thông thường. Với JIT (nơi truy cập trực tiếp trường là rẻ như truy cập một địa phương), truy cập trực tiếp trường là khoảng 7x nhanh hơn so với gọi một getter tầm thường. Điều này đúng trong Froyo, nhưng sẽ cải thiện trong tương lai khi JIT vạch ra các phương pháp getter.
Vậy là nó nói rằng bạn sẽ sử dụng truy cập lĩnh vực trong phạm vi lớp:
public class MyObject {
public Object innerObject; // This would be private if I was using a getter
public void doSomeStuff(){
if(innerObject){ // Within class access like this
// ....
}
}
public Object getInnerObject(){ // This would be removed if I was using field access
return innerObject;
}
}
Nhưng những gì về truy cập từ một đối tượng:
public class SecondObject {
public void doSecondSomething(){
MyObject ob = new MyObject();
Object inner;
//This is my question basically (from an Android performance perspective)
inner = ob.getInnerObject();
// OR
inner = b.innerObject
}
}
Để chỉ ra điều này, hãy nhớ rằng Dalvik không phải là JVM và thực hành này không nên được coi là một cách chung để làm trong phát triển Java bình thường. – Esko
Trích dẫn của bạn nói tất cả, phải không? ** Đó là hợp lý để làm theo thực hành lập trình hướng đối tượng phổ biến và có getters và setters trong giao diện công cộng **. Ngoài ra: đừng đi quá mức thiết kế. Chỉ cần sử dụng getter trừ khi bạn thực hiện một số lượng lớn các cuộc gọi. hoặc có vấn đề về tốc độ. – Nanne