private List<? extends Object> mTestList;
public <T extends Object> void notifyDataSetChanged(int position, T object) {
mTestList.set(position, object);
}
如图。
1) 直接给你代码,代码里有详细的注释,copy后即可运行
import java.util.ArrayList;
import java.util.List;
/**
* @author pcj
* @date 2022/4/19
* @note
*/
public class T3 {
//private List<? extends Object> mTestList;
//在泛型里,?是不确定的类型,所以这里修改为Object
private List<Object> mTestList;
public <T extends Object> void notifyDataSetChanged(int position, T object) {
//做个判断,避免jvm没有初始化
if (mTestList == null) mTestList = new ArrayList<Object>();
mTestList.set(position, object);
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
T3 t3 = new T3();
// 做个判断,可能会有不初始化的情况
if (t3.mTestList == null) {
List<Object> temp_mTestList = new ArrayList<Object>();
t3.mTestList = temp_mTestList;
}
// 添加测试数据
t3.mTestList.add(new Integer(1));
t3.mTestList.add(new Integer(2));
System.out.println("修改前:" + t3.mTestList.toString());
//执行修改
t3.notifyDataSetChanged(1, 3);
System.out.println("修改后:" + t3.mTestList.toString());
}
}
你是想问如果向list中添加对象么?
1、正常顺序添加就是用list.add(xxx);
2、指定位置插入list.add(index,xxx),该位置之后的数据会向后平移;
3、指定位置替换list.set(index,xxx),这个会替换指定索引位的数据,其他不变,不过这个替换是必须原位置有值的情况下才行哦,要不然报错;
所以看你想做什么了,要用对应的方法
还有你不理解这个T是怎么来的?这个T是泛型,一般是在你实例化类的时候指定的,在调用方法的时候泛型已经确定了例如:
import java.util.ArrayList;
import java.util.List;
public class Demo<T extends Object> {
private List<T> mTestList;
public void notifyDataSetChanged(int position, T object) {
if (mTestList == null) {
mTestList = new ArrayList<T>(16);
}
mTestList.add(position, object);
}
public static void main(String[] args) {
Demo<A> demo = new Demo<A>();
demo.notifyDataSetChanged(0,new A());
}
}
class A extends Object{
}
正在使用通用通配符,无法执行添加操作,只能添加null
代码如下,望采纳
private List<T> mTestList;
public void notifyDataSetChanged(int position, T object) {
mTestList.set(position,object);
}
要么把泛型定义在类上,要么把list定义成
List<Object>
,不要用?
{}】;【?】是通配符,泛指所有类型,一般用于定义一个引用变量,这样可以指向多个对象。