Arrays.asList方法概括

在Java中使用Arrays.asList()将数组转换为List时需谨慎,该方法创建的List不可修改,尝试添加或删除元素会抛出异常。本文揭示了这一细节,并提供了正确实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java语言中,把数组转换成List集合,有个很方便的方法就是 List<String> list = Arrays.asList("a","b","c");

但你可能不知道这样得到的List它的长度是不能改变的。当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException)。怎么会这样?!只需要看看asList()方法是怎么实现的就行了。

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,显然它是Arrays类自己定义的一个内部类!这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!

总结一下吧,如果你的List只是用来遍历,就用Arrays.asList()吧!如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素吧!


### 如何使用 Bmob 云服务 #### 集成 Bmob 云服务 SDK 为了在项目中使用 Bmob 云服务,首先需要将 Bmob 的 SDK 添加到项目的依赖项中。如果是在 Android 平台上开发,则可以通过 Gradle 文件引入相应的库版本 `bmob-sdk:3.4.6-0304`[^4]。 ```gradle dependencies { implementation 'cn.bmob.android:bmob-sdk:3.4.6-0304' } ``` 完成上述操作后,在代码运行前还需要初始化该 SDK。这一步通常会在应用程序启动时执行一次: ```java import cn.bmob.v3.BMob; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); BMob.initialize(this, "你的AppKey"); } } ``` 这里的 `"你的AppKey"` 是指你在 Bmob 后台创建应用时分配给它的唯一标识符[^3]。 #### 数据的操作 (增删改查) 一旦完成了基础配置工作之后就可以利用其提供的 API 来管理云端的数据对象了。下面是一些基本的例子展示如何进行数据的增加、删除、更新以及查询操作[^1]: ##### 增加记录 向服务器新增一条数据非常简单,只需要实例化对应的实体类并调用 save 方法即可: ```java MyObject object = new MyObject(); object.setField("value"); object.save(new SaveListener<String>() { @Override public void done(String objectId, BmobException e) { if(e == null){ Log.i("bmob","保存成功,返回objectId为:"+objectId); }else{ Log.i("bmob","保存失败:" + e.getMessage()); } } }); ``` ##### 删除记录 当不再需要某条特定的信息时可依据此信息的对象 ID 调用 delete 函数来移除它: ```java BmobQuery<MyObject> query = new BmobQuery<>(); query.getObject(objectId, new QueryListener<MyObject>() { @Override public void done(MyObject myObject, BmobException e) { if(myObject != null && e == null){ myObject.delete(new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ Log.d("delete", "删除成功!"); } else { Log.e("error",e.toString()); } } }); } } }); ``` ##### 修改记录 对于已经存在的数据也可以很方便地对其进行编辑后再提交回数据库存储起来: ```java BmobQuery<MyObject> query = new BmobQuery<>(); query.getObject(objectId,new QueryListener<MyObject>(){ @Override public void done(MyObject myObject,BmobException e){ if(e==null&&myObject!=null){ myObject.setField("newValue"); myObject.update(new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ Log.d("update","修改成功!"); }else{ Log.e("error",e.toString()); } } }); } } }); ``` ##### 查询记录 最后还可以编写复杂的条件语句去检索满足某些标准的结果集出来供前端显示或者进一步处理: ```java BmobQuery<MyObject> query = new BmobQuery<>(); // 可选设置过滤器等参数... List<BmobQuery<MyObject>> queries = Arrays.asList(query); final List<MyObject> results = new ArrayList<>(); for(int i=0;i<queries.size();i++) { final int index=i; queries.get(i).findObjects(new FindListener<MyObject>() { @Override public void done(List<MyObject> list, BmobException ex) { synchronized(results){ if(ex==null){ results.addAll(list); } // 如果当前线程是最后一个请求则通知主线程继续往下走 if(index==(queries.size()-1)){ runOnUiThread(() -> processResults(results)); } } } }); } ``` 以上便是关于怎样运用 Bmob 提供的服务来进行常规性的 CRUD 操作的一个概括介绍。 #### PHP 接口中的 dataType() 除了移动端的支持外,Bmob 还提供了基于 RESTful 架构风格设计而成的一套 Web Service APIs 方便其他平台上的开发者也能轻松接入进来共同构建跨设备间无缝衔接的应用生态系统。比如在其官方发布的 Php 版本客户端里头定义了一个名为 **dataType** 的辅助函数用来指定发送 HTTP 请求体内的 Content-Type 头字段值应该采用 application/json 形式还是 multipart/form-data 类型等等[^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值