2013-11-28 35 views
23

Tôi đã nhanh chóng googled cho một câu trả lời nhưng không thể tìm/suy nghĩ của các thông số tìm kiếm chính xác.Ý nghĩa của <E> trong Java là gì?

Tôi tự dạy Java, nhưng dường như không thể tìm thấy ý nghĩa của một cú pháp nhất định.

public class Node<E>{ 
    E elem; 
    Node<E> next, previous; 
} 

Dấu hiệu <E> là gì? Tôi mơ hồ nhớ niềng mũi tên có cái gì đó để làm với vectơ nhưng dựa trên mã ở trên tôi có cảm giác nó phải làm với liệt kê.

Bất kỳ hỗ trợ hoặc làm rõ nào sẽ được đánh giá cao. Cảm ơn bạn.

+8

Google cho "Generics" –

+0

Tiêu đề của câu hỏi của bạn cho ít dấu hiệu cho thấy những gì nó là về. Vui lòng xem xét đổi tên nó, ví dụ: "Cú pháp có ý nghĩa gì trong Java?" – joeytwiddle

+0

Bạn đúng, tôi sẽ thay đổi tiêu đề như thế nào? Tôi không dễ dàng thấy tùy chọn để làm như vậy. –

Trả lời

29

Chúng được gọi là Generics.

Nói chung, các loại này cho phép loại (lớp và giao diện) là tham số khi xác định các lớp, giao diện và phương thức.

Sử dụng Generics cung cấp cho nhiều lợi ích hơn sử dụng mã không chung chung, như sau từ hướng dẫn của Java:

  • kiểm tra kiểu mạnh tại thời gian biên dịch. Trình biên dịch Java áp dụng kiểu kiểm tra mạnh mẽ cho mã chung và các vấn đề lỗi nếu mã vi phạm an toàn loại. Sửa lỗi biên dịch thời gian dễ dàng hơn so với sửa lỗi thời gian chạy, có thể khó tìm.

    Ví dụ:

    // without Generics 
    List list = new ArrayList(); 
    list.add("hello"); 
    
    // With Generics 
    List<Integer> list = new ArrayList<Integer>(); 
    list.add("hello"); // will not compile 
    
  • Cho phép lập trình để thực hiện các thuật toán chung. Bằng cách sử dụng generics, lập trình viên có thể thực hiện các thuật toán chung làm việc trên các bộ sưu tập các loại khác nhau, có thể được tùy chỉnh, và loại an toàn và dễ đọc hơn.

  • Loại bỏ phôi.

    Ví dụ, đoạn mã sau đây mà không Generics đòi hỏi đúc:

    List list = new ArrayList(); 
    list.add("hello"); 
    String s = (String) list.get(0); 
    

    Khi viết lại để sử dụng Generics, mã không đòi hỏi đúc:

    List<String> list = new ArrayList<String>(); 
    list.add("hello"); 
    String s = list.get(0); // no cast 
    
0

Cú pháp java là cách chỉ ra Kiểu chung. Về cơ bản, điều này chỉ có nghĩa là nó có thể là một đối tượng Node có thể mang bất kỳ loại nào.

bạn nên kiểm tra this ra cho một turorial tốt về generics java

+1

Từ ngữ không rõ ràng - nghĩa là "tiếp tục" nghĩa là gì? – SimonT

2

Đây <E> biểu thị tham số loại Node lớp .Công tham số kiểu định nghĩa rằng nó có thể tham khảo bất kỳ loại (như String, Integer, nhân viên vv).Java Generics có loại công ước tham số đặt tên như sau:

  1. T - Loại
  2. E - Yếu tố
  3. K - Key

  4. N - Số

  5. V - Giá trị

Ví dụ lấy scenerio sau

public class Node<E>{ 
    E elem; 
    Node<E> next, previous; 
} 
class Test{ 
    Node<String> obj = new Node<>(); 
} 

Đối với scenerio trên, trong nền Node lớp 'E' sẽ tham khảo các Chuỗi loại và lớp học sẽ được trông giống như sau

public class Node<String>{ 
    String elem; 
    Node<String> next,previous; 
} 

Không chỉ Chuỗi bạn cũng có thể sử dụng Integer, Character, Employee etc như một tham số kiểu.

Bạn cũng có thể sử dụng Generics với Interface, method và constructor.

Để biết thêm về Generics thăm này:

https://www.journaldev.com/1663/java-generics-example-method-class-interface https://www.javatpoint.com/generics-in-java