gpt4 book ai didi

Java 可选参数未按预期工作

转载 作者:行者123 更新时间:2023-12-01 17:00:44 24 4
gpt4 key购买 nike

我当前正在运行 java 7,我发现 java 在特定情况下有奇怪的行为。下面的代码显示了通用 Trie 数据结构的迭代器的 next() :

public final Iterator iterator = new Iterator()
{
private int objsProcessed = 0;
private K currentKeySequence = null;

@Override
public boolean hasNext()
{
return objsProcessed < numObjects;
}

@Override
public Object next()
{
if (keySequences.isEmpty() == false)
{
currentKeySequence = keySequences.get(objsProcessed);
}
else
{
return null;
}
objsProcessed++;
Character[] test=new Character[]{'a','b'};
Object result = reference.get(test);
result = reference.get(currentKeySequence);
return result;
}

@Override
public void remove()
{
reference.remove(currentKeySequence);
}
};

按键序列添加如下:

public Trie add(V object, K... keySequence)
{
Node<K, V> currentNode = root;
for (int i = 0; i < keySequence.length; i++)
{
currentNode = currentNode.insert(new Node<K, V>(keySequence[i],
currentNode));
}
currentNode.addObject(object);
keySequences.add((K) keySequence);
numObjects++;
return this;
}

get 方法采用可变数量的参数:

public List<V> get(K... keySequence)
{
Node<K, V> currentNode = root;
for (int i = 0; i < keySequence.length; i++)
{
currentNode = currentNode.getNode(keySequence[i]);
}
if (currentNode != null)
return currentNode.getObjects();
else
return null;
}

问题是,当我传递 currentKeySequence (在我的测试用例中,它是一个大小为 2 的 Character[])时,它使 keySequence 变量实际上是一个大小为 1 的数组,其中包含 currentKeySequence 而不仅仅是 currentKeySequence (size 2)。如果我传递 new Character[]{'a','b'} 而不是 currentKeySequence ,它会按预期工作,而无需将数组放入包装数组中。

更新:换句话说,我有 currentKeySequence = test = Character[]{'a','b'} ,其中唯一的区别是 currentKeySequence 是从列表中检索的,并且 var test 是使用“new”关键字在本地实例化的。

如果我通过了 var 测试,则 keySequence=Character[]{'a','b'} 如果我通过了 currentKeySequence,则 keySequence=Object[]{Character[]{'a','b'} }。我知道如果我调用 get('a','b'),keySequence 将是一个 Object[]{'a','b'}。我希望如果参数始终包装到数组中,两种情况都是相同的。

我做错了什么还是这是一个错误?

最佳答案

这不是一个错误。这就是 varag 的工作原理。

变量参数 (varags) 允许您传入无参数或多个参数。为了实现这一点,它使用一个数组来跟踪参数。单个参数并不特殊;它存储在数组的第一个索引中。

在执行任何操作之前检查数组是否包含项目总是好的,因为客户端不能为参数指定任何参数。

关于Java 可选参数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27788590/

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