2010-06-18 25 views
5

Tôi muốn tạo một phương thức chung chung trong Scala. Phải mất hai tham số. Đầu tiên là loại giao diện Java chung (nó là từ truy vấn tiêu chuẩn JPA). Hôm nay trông như thế này:Phương pháp Scala trong đó kiểu tham số thứ hai bằng một phần của kiểu generic từ tham số đầu tiên

def genericFind(attribute:SingularAttribute[Person, _], value:Object) { 
    ... 
} 

// The Java Interface which is the type of the first parameter in my find-method: 
public interface SingularAttribute<X, T> extends Attribute<X, T>, Bindable<T> 

Bây giờ tôi muốn đạt được như sau: giá trị hiện là loại java.lang.Object. Nhưng tôi muốn làm cho nó cụ thể hơn. Giá trị phải là cùng loại với trình giữ chỗ "_" từ tham số đầu tiên (và đại diện cho "T" trong giao diện Java).

Có phải bằng cách nào đó có thể và cách thực hiện?

BTW Xin lỗi vì tiêu đề câu hỏi ngu ngốc (bất cứ đề nghị?)

EDIT: thêm một ví dụ addtional mà có thể làm cho vấn đề rõ ràng hơn:

// A practical example how the Scala method could be called 

// Java class: 
public class Person_ { 
    public static volatile SingularAttribute<Person, Long> id; 
} 

// Calling the method from Scala: 
genericFind(Person_.id, Long) 

Trả lời

9

Trong số đầu đầu của tôi (Tôi vẫn đang bắt đầu với Scala):

def genericFind[T](attribute:SingularAttribute[Person, T], value:T) { 
    ... 
} 
+1

Wow, tôi đang thực hiện essed;) Cảm ơn câu trả lời nhanh. Trên thực tế nó có vẻ làm việc. Đá Scala! BTW: không quan trọng lắm, nhưng điều đó cũng có thể được thực hiện trong Java? – ifischer

+1

Có, nó có thể trong Java quá, nó sẽ là như sau: "public Person genericFind (SingularAttribute < Person, T > attribute, T value) {...}". Hi vọng điêu nay co ich :). Lưu ý rằng có một số vấn đề nhỏ với điều này, ví dụ, bạn muốn chuyển một kiểu con của T thay vì một thể hiện chính xác T. Bạn có thể làm việc này với chú thích bổ sung nhưng có lẽ ngoài những gì bạn cần. – Calum

+0

Ok, tốt để biết rằng nó có thể trong Java. Không cần chú thích bổ sung đó, nhưng tôi vẫn muốn biết nó là gì! Cảm ơn – ifischer

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