Hallo,
Diese Info ist wahrscheinlich irrelevant, aber ich versuche ein singleton oject zu erstellen, welches als Pool für weitere Pools dienen soll.
Mein Problem:
Ich möchte eine Map mit verschiedenen GenericObjectPools haben. Diese GenericObjectPools müssen einen Type mitgegeben bekommen. Als Type möchte ich irgendetwas, was das Interface StorageClientAPI implementiert angeben. Also Quasi GenericObjectPool<? extends StorageClientAPI>.
Ich verstehe im Moment nicht, warum ich bei meinem Code in der Methode returnStorageClient einen Compiler Error erhalte..
Kann mir vielleicht irgendjemand behilflich sein?
Diese Info ist wahrscheinlich irrelevant, aber ich versuche ein singleton oject zu erstellen, welches als Pool für weitere Pools dienen soll.
Mein Problem:
Ich möchte eine Map mit verschiedenen GenericObjectPools haben. Diese GenericObjectPools müssen einen Type mitgegeben bekommen. Als Type möchte ich irgendetwas, was das Interface StorageClientAPI implementiert angeben. Also Quasi GenericObjectPool<? extends StorageClientAPI>.
Ich verstehe im Moment nicht, warum ich bei meinem Code in der Methode returnStorageClient einen Compiler Error erhalte..
Kann mir vielleicht irgendjemand behilflich sein?
Java:
import org.apache.commons.pool2.impl.GenericObjectPool;
public class StorageClientPoolPool {
private static StorageClientPoolPool instance = new StorageClientPoolPool();
private HashMap<String, GenericObjectPool<? extends StorageClientAPI>> storageClientPools;
/**
* Default-Konstruktor, der nicht außerhalb dieser Klasse
* aufgerufen werden kann
*/
private StorageClientPoolPool() {}
/**
* Statische Methode, liefert die einzige Instanz dieser
* Klasse zurück
*/
public static StorageClientPoolPool getInstance() {
return instance;
}
/**
*
* Liefert einen StorageClient aus dem Pool
*
*/
public StorageClientAPI getStorageClient(String storageClientId) throws Exception {
return (StorageClientAPI) storageClientPools.get(storageClientId).borrowObject();
}
/**
*
* Legt einen StorageClient zurück in den Pool
*
*/
public <T extends StorageClientAPI> void returnStorageClient(String storageClientId, T storageClient) {
// ERROR: The method returnObject(capture#2-of ? extends StorageClientAPI) in the type
// GenericObjectPool<capture#2-of ? extends StorageClientAPI> is not applicable for the arguments (T)
storageClientPools.get(storageClientId).returnObject(storageClient);
}
/**
*
* Fügt einen Pool hinzu
*
*/
public <T extends StorageClientAPI> void addStorageClientPool(String storageClientId, GenericObjectPool<T> storageClientPool) throws StorageClientPoolException {
if(!storageClientPools.containsKey(storageClientId)) {
storageClientPools.put(storageClientId, storageClientPool);
}else {
throw new StorageClientPoolException("A StorageClientPool with the ID " + storageClientId + " is still in the StorageClientPoolPool!");
}
}
}