java – 错误:(32,27)错误:不兼容的类型:对象无法转换为long
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 错误:(32,27)错误:不兼容的类型:对象无法转换为long,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2491字,纯文字阅读大概需要4分钟。
内容图文
![java – 错误:(32,27)错误:不兼容的类型:对象无法转换为long](/upload/InfoBanner/zyjiaocheng/725/2e5b984986d94471992be72cc3594106.jpg)
我是Java的新手.
Error:(40, 5) error: method does not override or implement a method from a supertype
Error:(32, 27) error: incompatible types: Object cannot be converted to long
在
@Override
public long getItemId(int position) {
String item = getItem(position);
return hashMap.get(item);
}
完整代码如下
package com.javapapers.android.listview;
import android.content.Context;
import android.widget.ArrayAdapter;
import java.util.HashMap;
import java.util.List;
public class SimpleArrayAdapter extends ArrayAdapter {
Context context;
int textViewResourceId;
private static final String TAG = "SimpleArrayAdapter" ;
HashMap hashMap = new HashMap();
public SimpleArrayAdapter(Context context, int textViewResourceId,
List objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.textViewResourceId = textViewResourceId;
for (int i = 0; i < objects.size(); ++i) {
hashMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return hashMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void add(String object){
hashMap.put(object,hashMap.size());
this.notifyDataSetChanged();
}
}
解决方法:
您遇到的问题源于hashMap.get(item)返回Object的事实,但您的方法签名指定您需要返回long.
public long getItemId(int position) { // you say you will return a long
String item = getItem(position);
return hashMap.get(item); // but try to return an Object
}
在Java中,JVM无法自动将任何随机Object转换为long,因此编译器会给您错误.
有几种方法可以解决这个问题.
错误的方法
第一个(坏的)方法是将你从地图获得的变量强制转换为如下所示:
public long getItemId(int position) { // you say you will return a long
String item = getItem(position);
return (long)hashMap.get(item); // and you return a long
}
这将使你的代码编译,但你在这里有效地做的是承诺编译器,你真的,非常确定你放在Map中的是一个很长的.此时编译器将尝试将Long解包为long并返回它.如果它真的很长,这将起作用,如果不是,你将得到一个ClassCastException抛出.
正确的方式
在较新版本的Java中,有一个名为Generics的东西.使用泛型,您可以指定允许的对象类型,可以在定义时添加到容器中,如下所示:
// create a HashMap where all keys are Objects and all values are Longs
Map<Object, Long> hashMap = new HashMap<>();
public long getItemId(int position) { // you say you will return a long
String item = getItem(position);
return hashMap.get(item); // no cast is required
}
现在,编译器将只允许Long类型的值存储在您的映射中,并且从中获取的任何内容()将自动为Long,从而消除了转换返回类型的需要(和危险).
内容总结
以上是互联网集市为您收集整理的java – 错误:(32,27)错误:不兼容的类型:对象无法转换为long全部内容,希望文章能够帮你解决java – 错误:(32,27)错误:不兼容的类型:对象无法转换为long所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。