2013-02-22 53 views
5

khi bạn có một phương pháp, tôi hiểu rằng nó có ý nghĩa để tuyên bố nó chung chung để tôi có thể lấy các đối số chung chung. Như thế này:Điểm chung của lớp học là gì?

public <T> void function(T element) { 
    // Some code... 
} 

Nhưng chính xác thì ý tưởng đằng sau việc đưa ra toàn bộ một lớp chung chung là gì nếu tôi có thể đơn giản khai báo mọi phương thức chung chung?

+0

Vì vậy, bạn có thể có các biến trong lớp của một loại chung? – Dukeling

+0

Một phương pháp là một thành viên và nó có thể là chung chung mà không làm cho toàn bộ lớp chung chung. Điều duy nhất tôi có thể nghĩ đến là có thể tạo ra các biến mẫu chung chung – user1420042

+4

Tôi nghĩ rằng điều này không nên được downvoted mà không có lời giải thích. Trong khi hầu hết chúng ta sử dụng Java trong một khoảng thời gian có thể nghĩ điều này là hiển nhiên, có những người ngoài kia mới bắt đầu học, và tôi nghĩ đây là một câu hỏi hợp lệ. – Axel

Trả lời

6

Vâng, sự khác biệt là nếu bạn cố gắng làm cho mỗi phương pháp trong lớp của bạn chung chung loại chung bạn muốn sử dụng trong câu nói đầu tiên của bạnGenericMethod có thể hoặc có thể không phải là cùng một loại. Ý tôi là gì.

public <T> void firstGenMethod(...){ 

} 

public <T> void secondGenMethod(...){ 

} 

Test:

SomeClass ref = new SomeClass(); 
    ref.firstGenMethod("string"); 
    ref.secondGenMethod(123);//legal as this generic type is not related to the generic type which is used by firstGenMethod 

Trong trường hợp trên không có gaurentee rằng cả hai phương pháp có type.It chung cùng phụ thuộc vào cách bạn gọi họ. Nếu bạn làm cho lớp chung mặc dù, kiểu được áp dụng cho tất cả các phương thức bên trong lớp đó.

class Test<T>{ 

    public void firstGenMethod(T t){ 

    } 

    public void secondGenMethod(T t){ 

    } 
} 

Test:

Test<String> testingString = new Test<>(); 
    testingString.firstGenMethod("abc"); 
    testingString.firstGenMethod(123);// invalid as your Test class only expects String in this case 

Bạn thường muốn làm cho lớp học của bạn chung chung nơi bạn muốn toàn bộ hành vi (phương pháp) của lớp đó để xử lý trên cùng loại. ví dụ tốt nhất là lớp học trong Khung thu thập Java

1

Ý tưởng chính là để ràng buộc các lớp/phương pháp cho một ví dụ tốt nhất type.The là khái niệm Generics trong language.It lập trình là ứng dụng thực tế của tính đa hình
lớp Generic tóm lược hoạt động mà không phải là cụ thể cho một đặc biệt loại dữ liệu. Việc sử dụng phổ biến nhất cho các lớp chung là với các bộ sưu tập như danh sách liên kết, bảng băm, ngăn xếp, hàng đợi, cây và các hoạt động như thêm và xóa các mục khỏi bộ sưu tập được thực hiện theo cùng một cách bất kể loại dữ liệu được lưu trữ.

Đối với hầu hết các trường hợp yêu cầu lớp thu thập, cách tiếp cận được khuyến nghị là sử dụng các trường hợp được cung cấp bằng ngôn ngữ lập trình.
reffering từ oracle docs
Một loại generic là class generic hoặc giao diện đó là tham số so với các loại

public class Box { 
    private Object object; 

    public void set(Object object) { this.object = object; } 
    public Object get() { return object; } 
} 


Bằng quát bạn có thể nghiêm ngặt nó để

public class Box<T> { 
    // T stands for "Type" 
    private T t; 

    public void set(T t) { this.t = t; } 
    public T get() { return t; } 
} 


Tôi cũng đề nghị bạn xem điều này tutorial

4

Hãy xem các lớp Bộ sưu tập. Lấy List<T> làm ví dụ. Nếu lớp không được khai báo chung, bạn sẽ đảm bảo rằng chỉ các phần tử của lớp đúng có thể được chèn vào danh sách đó? Và làm thế nào bạn sẽ biết những gì bạn nhận được khi gọi ArrayList.get(i)?

2

Chính xác, để cho rằng tất cả các phương pháp trong lớp này áp dụng cho một loại nhất định.

Điều này thường được sử dụng trong các lớp "vùng chứa". Nếu bạn đang xây dựng một Danh sách, và bạn làm cho nó chung chung, bạn muốn chắc chắn rằng việc thêm phần tử, nhận phần tử, lặp lại, v.v. luôn luôn sử dụng cùng một kiểu. Khi bạn đề cập, điều này cũng cho phép bạn sử dụng các biến mẫu của một kiểu nhất định và có một số phương thức sử dụng cá thể này (có thể trả về, ảnh hưởng đến nó ...) một cách mạch lạc.

Nếu bạn có một lớp "chung chung" với nhiều loại khác nhau, có thể là dấu hiệu cho thấy bạn đang viết hai lớp chung trong một ... (mặc dù đây có thể là điều hợp pháp.)

Các vấn đề liên quan