gpt4 book ai didi

java - 我无法转换 onclicklistener

转载 作者:行者123 更新时间:2023-12-02 11:54:23 28 4
gpt4 key购买 nike

我有两个简单的不同类,其中一个类扩展了另一个类。我的第一个类是:

public class MyObject {}

里面没有任何东西。

还有另一个:

public class People extends MyObject{
public String UserId;


public void setUserId(String userId) {
UserId = userId;
}

public String getUserId() {
return UserId;
}
}

我打算在我的适配器和 onBindViewHolder 方法中将 myobject 转换给人们,我可以做得很好并且有效,如下所示:

   @Override
public void onBindViewHolder(final RecyclerViewHolder holder, int position) {

final People people = (People) array.get(position);
//array is:ArrayList<MyObject> array
...}

但问题是当我要在同一个类中但在 onclicklistener 中进行此转换时,如下所示:

holder.rlsearchitem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
People people1= (People) savedPeopleArray.get(i);
//savedPeopleArray is:ArrayList<MyObject> savedPeopleArray
....
}
});

我收到此错误:

com.example.qa.setGet.MyObject cannot be cast to com.example.qa.setGet.People

为什么我会收到此错误,即使我之前使用过此转换并且它有效?!

最佳答案

这是因为您在 ArrayList 中插入了值 array作为人,例如: private List<MyObject> array = new ArrayList()

然后在你插入的地方

final MyObject obj = new People();
array.add(obj)

简而言之,您将运行时对象 People 插入 array 内,所以向下转型是没有问题的。

但是在ArrayList中savedPeopleArray您插入 MyObject,例如这样:

final MyObject obj = new MyObject();
savedPeopleArray = new MyObject();

在运行时,savedPeopleArray 元素是 MyObject 类型的实例,因此不可能向下转换为 People因为该值为 MyObject防止ClassCastException例如,您可以在转换之前使用实例

MyObject obj= savedPeopleArray.get(i);
if (obj instanceof People){
People people = (People) obj;
}

我认为这个SO链接将帮助您了解有关java中向上转型/向下转型的更多信息What is the difference between up-casting and down-casting with respect to class variable

关于java - 我无法转换 onclicklistener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47700368/

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