2017-04-17 44 views
0

我使用generic object pooling重用Cipher對象。不兼容的類型:com.rh.host.Validator <T>無法轉換爲com.rh.host.Pool.Validator <T>

Eracom

Pool< Cipher> pool = PoolFactory.newBoundedBlockingPool(10, new CipherPicker("DESede/CBC/NoPadding"), new CipherPickerValidator()); 

PoolFactory

public static <T> Pool<T> newBoundedBlockingPool(int size, ObjectFactory<T> factory, Validator<T> validator) { 
     return new BoundedBlockingPool<T>(size, factory, validator); 
    } 

游泳池

public interface Pool<T> 
{ 
T get(); 
void shutdown(); 
public boolean isValid(T t); 
public void invalidate(T t); 
} 
} 

驗證

public interface Validator<T> 
{ 

    public boolean isValid(T t); 

    public void invalidate(T t); 
} 

CipherPickerValidator

public final class CipherPickerValidator implements Validator <Cipher> 
{ 

    @Override 
    public boolean isValid(Cipher t) { 
     return true; 
    } 

    @Override 
    public void invalidate(Cipher t) { 
//  return false; 
    } 
} 

我得到錯誤PoolFactory。它在validator下顯示一條紅線。

錯誤

incompatible types: com.rh.host.Validator<T> cannot be converted to com.rh.host.Pool.Validator<T> where T is a type-variable: 
T extends Object declared in method <T>newBoundedBlockingPool(int,ObjectFactory<T>,com.rh.host.Validator<T>) 

我跟着A Generic and Concurrent Object Pool

回答

2

一些文章的代碼似乎已被改寫的。

錯誤是試圖分配

com.rh.host.Validator 

com.rh.host.Pool.Validator 

寫的,這顯然發生了什麼事。你有兩個無關的類型,都稱爲Validator。該文章似乎在其自己的文件中呈現嵌套類型。

因此,確保每個名稱只有一個定義。並可能找到更好的文章。

相關問題