Tôi đã đoạn mã sau để xây dựng một bộ nhớ cache sử dụng google bộ sưu tập:Thực hiện một giao diện java trong Scala
val cache = new MapMaker().softValues().expiration(30,
TimeUnit.DAYS).makeComputingMap(
new com.google.common.base.Function[String,Int] {
def apply(key:String):Int ={
1
}
})
Và Tôi nhận được thông báo lỗi sau:
error: type mismatch;
found : java.lang.Object with
com.google.common.base.Function[java.lang.String,Int]{ ... }
required: com.google.common.base.Function[?, ?]
new com.google.common.base.Function[String,Int] {
^
tôi tự hỏi tại sao loại nào không khớp?
Mã thực tế là:
import com.google.common.collect.MapMaker
trait DataCache[V] {
private val cache = new MapMaker().softValues().makeComputingMap(
new com.google.common.base.Function[String,V] {
def apply(key:String):V = null.asInstanceOf[V]
})
def get(key:String):V = cache.get(key)
}
Kind regards, Ali
PS - Tôi đang sử dụng google-bộ sưu tập v1
Không làm việc, bây giờ tôi nhận được lỗi này: lớp loại yêu cầu nhưng com.google.common.base.Function [_, _] tìm thấy com.google.common.base.Function mới [ _, _] Tôi cũng đã thử các biến thể, thực sự đầu ra thực sự khó hiểu: java.lang.Object với com.google.common.base.Function [_, _]
@Ali: có vẻ như bạn chỉ thử đề xuất đầu tiên. Tôi đã dán mã đầy đủ cho đề xuất thứ hai ngay bây giờ. Ngoài ra, vui lòng thêm đầu ra của '-explaintypes' vào câu hỏi của bạn. –
Trên thực tế đầu ra là khá lớn, tôi đã thêm mã thực tế mà người ta chỉ có thể sao chép dán để tạo lại thông báo lỗi. Xin vui lòng cho tôi biết nếu có bất cứ điều gì khác tôi sẽ cung cấp. –