2013-02-15 36 views
7

Hãy nói rằng tôi có folowing:Sử dụng Generics mà không sưu tập

List<Apple> myList = new ArrayList<Apple>(); 

Và nếu tôi muốn gọi myList.add(myApple), Java mong đợi từ myApple có loại Apple, không bất kỳ người khác (ngoại trừ lớp con của khóa học). Nhưng nếu tôi muốn có một đối tượng (Blender) và có các chữ ký phương thức khác nhau theo loại được khai báo bên trong <>mà không có quá tải phương thức; như vậy:

Blender<Apple> Tool = new Blender<Apple>(); 
Tool.blendIt(new Apple()); //expects to have only apples in here 

Blender<Banana> OtherTool = new Blender<Banana>(); 
OtherTool.blendIt(new Banana()); //only Banana's are permitted 

Có thể không?

+0

Bạn có thể kiểm tra xem phiên bản của nó là 'Banana' hay' Apple' với toán tử 'instanceof'. – enrybo

+0

Vâng tôi có thể, nhưng nó sẽ bị hỏng ngay sau khi tôi đặt 'Strawberry' bên trong' Máy xay sinh tố ':) Vì vậy, giải pháp linh hoạt là cần thiết – TomatoMato

Trả lời

11

bạn đang tìm kiếm Generic Class.

class Blender<T>{ 
T t; 
public void blendIt(T arg){ 
//stuff 
} 
} 

class Test { 
    public void method() { 
    Blender<Apple> blendedApple = new Blender<Apple>(); 
    blendedApple.blendIt(new Apple()); 
    Blender<Bannana> blendedBannana = new Blender<Bannana>();  
    blendedBannana.blendIt(new Bannana()); 
    } 
} 
+0

Đây chính xác là những gì tôi đang tìm kiếm, cảm ơn bạn! – TomatoMato

+0

@TomatoMato bạn được chào đón. :) cũng nhớ rằng bạn không thể sử dụng ký tự đại diện trong khai báo lớp chung. tức là, lớp Blender là lỗi trình biên dịch :) btw, đừng quên đánh dấu câu trả lời là được chấp nhận :) – PermGenError

2

Có nó là:

public class Blender<T> { 
    public void blendIt(T arg) { ... } 
} 
1

Trong Java Generics là KHÔNG chỉ dành riêng cho chỉ Collections. Nó là một khái niệm chung và áp dụng cho các lớp, các phương thức, vv Bạn có thể tạo một lớp chung chung.

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