Cách tốt nhất để chia sẻ dữ liệu giữa các lớp riêng biệt trong Java là gì? Tôi có một loạt các biến được sử dụng bởi các lớp khác nhau trong các tệp riêng biệt theo các cách khác nhau. Hãy để tôi cố gắng để minh họa cho một phiên bản đơn giản của vấn đề của tôi:Cách chia sẻ dữ liệu giữa các lớp riêng biệt trong Java
Đây là mã của tôi trước đây:
public class Top_Level_Class(){
int x, y;
// gets user input which changes x, y;
public void main(){
int p, q, r, s;
// compute p, q, r, s
doA(p,q,r);
doB(q,r,s);
}
public void doA(int p, int q, int r){
// do something that requires x,y and p, q, r
}
public void doB(int q, int r, int s){
// does something else that requires x, y and q, r, s
}
}
Bây giờ nó trông giống như sau:
public class Top_Level_Class(){
int x, y;
SomeClass1a a = new SomeClass1a();
SomeClass1a b = new SomeClass1b();
// gets user input which changes x, y;
public void main(){
int p, q, r, s;
// compute p, q, r, s
a.doA(p,q,r);
b.doB(q,r,s);
}
public class SomeClass1a() { // in its own separate file
public void doA(int p, int q, int r){
// do something that requires x,y and p, q, r
}
}
public class SomeClass1b() { // in its own separate file
public void doB(int q, int r, int s){
// does something else that requires x, y and q, r, s
}
}
Vì vậy, dù sao, tôi phải vượt qua x và y mỗi lần (trong đó x, y là các biến được lưu trong lớp helper func)?
a.set(x,y);
a.doA(p,q,r);
Ý tưởng của tôi là có một lớp chứa đặc biệt khi x và y được giữ. Lớp cấp cao nhất sẽ có một thể hiện của lớp container và thay đổi x, y bằng cách sử dụng các phương thức set.
// in the top level class:
Container c = new Container(x,y);
a.setContainer(c);
b.setContainer(c);
Lớp trợ giúp của tôi cũng sẽ có một phiên bản của vùng chứa và nó sẽ trỏ đến cùng một trường hợp ở cấp cao nhất. Bằng cách đó họ truy cập cùng một x, y như ở cấp cao nhất.
Tôi muốn biết nếu tôi nên
- Sử dụng các lớp container
- tải x, y mỗi lần vào lớp con
- ?? Một số phương pháp tốt hơn ??
Câu trả lời ở đây là, thật đáng buồn, 'nó phụ thuộc'. programmers.se có thể là một mục tiêu màu mỡ hơn cho câu hỏi này. – bmargulies
Nếu lớp bên trong không tĩnh, sau đó nó có thể truy cập các thành viên lớp cha ... – Vojta
Nó không phải là một lớp bên trong nếu nó trong một tập tin khác nhau. Và nó không phải là một phân lớp nếu nó không mở rộng siêu lớp. – Armand