java.lang.VerifyError函数调用的不兼容对象参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.VerifyError函数调用的不兼容对象参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3500字,纯文字阅读大概需要6分钟。
内容图文
![java.lang.VerifyError函数调用的不兼容对象参数](/upload/InfoBanner/zyjiaocheng/828/fca8392e7a684eabb497c85748eff142.jpg)
在编写一些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
和
map[b]=new Pair<Integer,Pair<K,V[]>[]>(7,(Pair<K,V[]>[])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");
}
};
}
}
这取决于对类
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)
SqlOutput的第64行如下
private MultiMap<Integer,Integer> edge_index=new MultiMap<Integer,Integer>();
最佳答案:
VerifyError通常意味着您加载了一个类文件,该文件以某种方式格式错误或者引用了另一个类文件,该文件的更改方式导致另一个类文件中的代码不再有效.例如,如果您编译了一个引用其他类中的方法的类文件,然后在更改该方法的签名后单独修改并重新编译第二个类,则会出现此类错误.
我建议做一个干净的构建,看看这个问题是否消失了.如果没有,请检查您是否使用了最新的JAR和源文件.
内容总结
以上是互联网集市为您收集整理的java.lang.VerifyError函数调用的不兼容对象参数全部内容,希望文章能够帮你解决java.lang.VerifyError函数调用的不兼容对象参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。