【问题标题】:How to add elements from a generic type to a list <long> in JAVA?如何将泛型类型的元素添加到 JAVA 中的列表 <long>?
【发布时间】:2023-04-07 16:32:02
【问题描述】:

我是在这里发布问题的新手,但从昨天开始一直在寻找解决方案,但找不到。非常感谢您的帮助。

我有两行,我试图将通用元素放入列表中并获得类型不匹配以将 Long 元素发送到列表。

List<Long> returnedPages = m_algo.getElement(Arrays.asList(pageIds));
List<Long> pagesNotInRam = new ArrayList<>();
List<Long> pageIdsToHandle = m_algo.putElement(pagesNotInRam, pagesNotInRam);

m_algo 已定义

private IAlgoCache<Long, Long> m_algo;

并且 IAlgoCache 与泛型类型一起使用

public interface IAlgoCache <K, V> {
public V getElement(K key);
public V putElement(K key, V value);}

我可以完成这项工作吗?我应该在某种循环中工作吗?

【问题讨论】:

  • 那么到底是什么问题?
  • 确切的错误是什么?
  • 如果您的m_algo 定义为IAlgoCache&lt;Long, Long&gt;,那么KV 应该代表Long 值,而不是Long 值列表。也许您想将它们定义为IAlgoCache&lt;List&lt;Long&gt;, List&lt;Long&gt;&gt;,但有消息告诉我这可能是X/Y problem
  • 我想过改变我的替换算法,但经过两个多小时的工作,我意识到这也需要几天的时间。当时我在这里注册,想也许有某种解决方案对于这个我没有想到的问题。

标签: java list generics arraylist


【解决方案1】:

您的代码存在几个问题。例如

public V getElement(K key); // takes an object as an argument (Long in your case)
m_algo.getElement(Arrays.asList(pageIds));  // you pass a list of objects (I suppose longs)

即使您解决了该问题并稍后传递了正确的密钥,您仍试图将 Long 对象分配给 List。这就是它抱怨的原因 - 无法对集合进行分配和对象操作,因为它们基本上是不同的类型。

List<Long> returnedPages = m_algo.getElement( properKey ); // Problem

尝试:

 List<Long> returnedPages=new ArrayList();
 returnedPages.add(m_algo.getElement( properKey));

putElement 的问题也是一样的。你只需要区分一个对象和一个数组或对象集合。即使它们具有相同的类型,它们也不能互换。

【讨论】:

  • 很抱歉没有 100% 清楚,就像我说的那样,我刚开始在这里提问。所以错误当然是类型不匹配“无法从 List 转换为 Long”。并且“IAalgoCache 类型中的方法 getElement(Long) 不适用于参数 (List)”。并且“IAalgoCache 类型中的 putElement(Long, Long) 方法不适用于参数 (List, List)”。也没有提到什么是pageIds,它被定义为long[]。
  • 是的,我发现了问题所在。这就是为什么我告诉你阅读更多关于 Longs 和 Lists 以及如何使用它们的内容。例如,如果您想将 Long 添加到列表中,您可以使用 list.add(element) 而不是 list=element。等等。
  • @Rosh 只是为了澄清一下,当您说 pageIds 定义为 long[] 时,您实际上是指 Long[] 吗?我怀疑是后者,因为如果 pageIds 是 long[],那么 Arrays.asList(pageIds) 的类型将是 List&lt;long[]&gt; 而不是 List&lt;Long&gt;
  • 首先,感谢您这么快的回答。所以基本上,一个循环可以解决问题吗?就像,第一个 List returnedPages=new ArrayList();然后可以使用 for 循环遍历 pageIds[i] 并使用 returnedPages.add(m_algo.getElement(pageIds[i])); ?
  • 是的,这可以解决问题;) 请记住,当您有一个原始 long、一个对象 Long 或一个集合 List 时。就像你不能说 Bowl = Apple 因为碗不能是 aple,但你可以说 Bowl.add(apple)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2019-03-12
  • 2019-07-01
  • 2010-10-19
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多