gpt4 book ai didi

java - 如何在不强制转换的情况下在具有相同数据类型参数的另一个泛型类(或接口(interface))中使用泛型类(或接口(interface))

转载 作者:行者123 更新时间:2023-11-29 06:47:45 27 4
gpt4 key购买 nike

我需要保留 <TKey key, TValue value> 的缓存类对。并且希望TKey可以是任何支持 Serializable 的类接口(interface)和TValue可以是任何支持 Serializable 的类和我自己的 ICacheable接口(interface)。

还有一个CacheItem保持 <TKey key, TValue value> 的类一对。我希望 Cache 类具有 void add(CacheItem cacheItem)方法。这是我的代码:

public class Cache<TKey extends Serializable, 
TValue extends Serializable & ICacheable >
{
private Map<TKey, TValue> cacheStore =
Collections.synchronizedMap(new HashMap<TKey, TValue>());

public void add(TKey key, TValue value)
{
cacheStore.put(key, value);
}

public void add(CacheItem cacheItem)
{
TKey key = cacheItem.getKey();
//Do not compiles. Incompatible types. Required: TValue. Found: java.io.Serializable
TValue value = (TValue) cacheItem.getValue();
//I need to cast to (TValue) here to compile
//but it gets the Unchecked cast: 'java.io.Serializable' to 'TValue'
add(key, value);
}
}

在另一个文件中:

public class CacheItem<TKey extends Serializable, 
TValue extends Serializable & ICacheable>
{
TKey key;
TValue value;

public TValue getValue()
{
return value;
}

public TKey getKey()
{
return key;
}
}

我能做些什么来避免转换吗?

最佳答案

使您的 add 方法签名如下所示:

public void add(CacheItem<TKey, TValue> cacheItem)

关于java - 如何在不强制转换的情况下在具有相同数据类型参数的另一个泛型类(或接口(interface))中使用泛型类(或接口(interface)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com