Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.VerifyError函数调用的对象参数不兼容_Java_Exception - Fatal编程技术网

java.lang.VerifyError函数调用的对象参数不兼容

java.lang.VerifyError函数调用的对象参数不兼容,java,exception,Java,Exception,在编写一些java代码时,我遇到了一个我无法识别的异常,java.lang.VerifyError。一些谷歌搜索指出这通常是一个jvm/javac错误,我很好奇我的情况是否如此 我怀疑的线路是 private Pair<Integer/*used size*/,Pair<K,V[]>[]>[] map=(Pair<Integer,Pair<K,V[]>[]>[])Array.newInstance(Pair.class,63);//good sta

在编写一些java代码时,我遇到了一个我无法识别的异常,java.lang.VerifyError。一些谷歌搜索指出这通常是一个jvm/javac错误,我很好奇我的情况是否如此

我怀疑的线路是

private Pair<Integer/*used size*/,Pair<K,V[]>[]>[] map=(Pair<Integer,Pair<K,V[]>[]>[])Array.newInstance(Pair.class,63);//good start number
private Pair[]map=(Pair[])Array.newInstance(Pair.class,63)//好的开始号码

map[b]=new Pair<Integer,Pair<K,V[]>[]>(7,(Pair<K,V[]>[])Array.newInstance(Pair.class,7));     
map[b]=newpair(7,(Pair[])Array.newInstance(Pair.class,7));
但我还不能确定

这是一个编译器错误还是我的代码有错

这些行是我在某处找到的泛型数组创建失败的变通方法

代码见附件

package osm2spacebook;

import java.util.Iterator;
import java.lang.reflect.Array;
import java.util.NoSuchElementException;

public class MultiMap<K,V> implements Iterable<K>{
    private int num_keys;
    @SuppressWarnings("unchecked")
    private Pair<Integer/*used size*/,Pair<K,V[]>[]>[] map=(Pair<Integer,Pair<K,V[]>[]>[])Array.newInstance(Pair.class,63);//good start number
    @SuppressWarnings("unchecked")
    private int bucket(K key){//position in bucket
        int h=key.hashCode();
        int b=h%map.length;
        if(map[b]==null)
            map[b]=new Pair<Integer,Pair<K,V[]>[]>(7,(Pair<K,V[]>[])Array.newInstance(Pair.class,7));
        return b;
    }
    private int position(K key){//position within bucket
        int b=bucket(key);//IMPORTANT this must use the buket function to obtain this otherwise it is a race
        for(int i=0;i<map[b].v1;i++)
            if(map[b].v2[i].v1==key)
                return i;
        if(map[b].v1==map[b].v2.length)
            map[b].v2=java.util.Arrays.copyOf(map[b].v2,map[b].v1*2);
        return map[b].v1++;
    }
    public V put(K key,V value){
        Pair<K,V[]> m=map[bucket(key)].v2[position(key)];
        for(int i=0;i<m.v2.length;i++)
            if(m.v2[i]==value)
                return value;
        m.v2=java.util.Arrays.copyOf(m.v2,m.v2.length+1);
        return m.v2[m.v2.length-1]=value;
    }
    public V[] get(K key){
        V[] v=map[bucket(key)].v2[position(key)].v2;
        return java.util.Arrays.copyOf(v,v.length);
    }
    public V[] remove(K key){
        throw new UnsupportedOperationException("Not implemented"); //TODO
    }
    public V remove(K key,V value){
        throw new UnsupportedOperationException("Not implemented"); //TODO
    }
    public boolean contains(K key){
        return position(key)<map[bucket(key)].v1;
    }
    public int numKeys(){
        return num_keys;
    }
    public Iterator<K> iterator(){
        return new Iterator<K>(){
            int bucket=0;
            int position=0;
            public boolean hasNext(){
                while(bucket<map.length){
                    if(map[bucket]!=null) 
                        if(position<map[bucket].v1)
                            return true;
                        else
                            position=0;
                    bucket++;
                }
                return false;
            }
            public K next(){
                if(hasNext())//positions cursor on next element if any
                    return map[bucket].v2[position++].v1;//updates position after read
                else
                    throw new NoSuchElementException();
            }
            public void remove(){
                throw new UnsupportedOperationException("Remove not supported in multimap iterator du to ambiguity");
            }
        };
    }
}
封装osm2spacebook;
导入java.util.Iterator;
导入java.lang.reflect.Array;
导入java.util.NoSuchElementException;
公共类MultiMap实现了Iterable{
私钥;
@抑制警告(“未选中”)
private Pair[]map=(Pair[])Array.newInstance(Pair.class,63);//好的开始号
@抑制警告(“未选中”)
私有int bucket(K键){//bucket中的位置
int h=key.hashCode();
int b=h%映射长度;
if(map[b]==null)
map[b]=newpair(7,(Pair[])Array.newInstance(Pair.class,7));
返回b;
}
私有int位置(K键){//bucket内的位置
int b=bucket(key);//重要信息这必须使用buket函数来获取,否则这是一场竞赛

对于(int i=0;iVerifyError通常意味着您加载的类文件格式不正确,或者引用了另一个类文件,该类文件的更改方式导致另一个类文件中的代码不再有效。例如,如果您编译的类文件引用了某个其他类中的方法,则独立修改如果在更改了第二个类的签名后重新编译了该类,则会出现这种错误


我建议做一个干净的构建,看看这个问题是否消失。如果没有,请检查您是否使用了最新的JAR和源文件。

对于遇到这个问题的不幸灵魂,我已经解决了两次,两种不同的方法(可能是相同的底层解决方案).我希望这能让你从我花在研究和敲打墙上的那些日子里解脱出来

我的项目:SBT 0.13/Lift 2.5/Scala 2.10.2

第一个解决方案:我从SBT 0.11/Lift 2.4/Scala 2.9.2升级到SBT 0.13/Lift 2.5/Scala 2.10.2。要正确更新所有依赖项(花了一天或两天时间),这是非常困难的,但它还是起了作用

第二个解决方案:我没有可以升级的最新版本,所以我找到了另一个选择:运行SBT clean并没有达到目的,所以我进一步重命名了(据SBT所知,有效地删除了)项目文件夹结构中的所有中间/衍生对象文件夹(只是在其名称中添加了一个“.archive”)(强制SBT从头开始重建/填充所有内容),即

  • /lib/-->我认为这是我添加的文件夹,因此可能不适用于您
  • /项目/目标/\*\*
  • /项目/项目/目标/\*\*
  • /目标/\*\*

在那之后,SBT重新下载了它需要的东西,重建了那些文件夹的内容,一切都正常了。如前所述,我相信这在第一次也会正常工作。我相信升级只会创建一个scala_2.10.2文件夹,以新填充中间/编译对象,类似于我重命名“target”文件夹。

使用javac*.java重新编译并使用java运行而不使用额外标志仍然会重现此问题。我使用的另一个类是Pair类,它是一个具有两个公共成员和一个构造函数的泛型类。除此之外,只有标准库依赖项。您是否从异常中获得了任何其他信息?S什么方法导致了这个问题?我不这么认为,反正我用完整的java输出更新了帖子。
package osm2spacebook;

public class Pair<T1,T2>{
    public T1 v1;
    public T2 v2;
    public Pair(T1 t1,T2 t2){
        v1=t1;
        v2=t2;
    }
}
Exception in thread "main" java.lang.VerifyError: (class: osm2spacebook/MultiMap, method: position signature: (Ljava/lang/Object;)I) Incompatible object argument for function call
    at osm2spacebook.SqlOutput.<init>(SqlOutput.java:64)
    at osm2spacebook.OsmImport.<init>(OsmImport.java:142)
    at osm2spacebook.OsmImport.main(OsmImport.java:280)
private MultiMap<Integer,Integer> edge_index=new MultiMap<Integer,Integer>();