harmony 鸿蒙Arkts子系统变更说明
Arkts子系统变更说明
cl.arkts.1 TreeSet.clear()和TreeMap.clear()接口行为变更
访问级别
公开接口
变更原因
容器类TreeMap和TreeSet的构造函数支持传入比较器,用户可以通过传入比较器来控制元素在二叉树上的插入位置。当用户调用了TreeMap和TreeSet的clear方法时,预期结果为仅清除数据, 实际结果为清除数据的同时还清除了用户传入的比较器,导致再次插入数据时不会遵循用户传入的比较器的规则,而是按照默认比较器的规则,不符合用户预期,需要变更接口行为。
变更影响
不兼容变更,影响调用clear()后的排序规则。
变更前
- 情况一: 用户传入比较器,调用了TreeMap的clear方法后,比较器失效。
//使用comparator firstValue > secondValue,表示为降序排序。
let treeMap : TreeMap<string,string> = new TreeMap<string,string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeMap.set("aa","3");
treeMap.set("dd","1");
treeMap.set("cc","2");
treeMap.set("bb","4");
let numbers = Array.from(treeMap.keys())
for (let item of numbers) {
console.log("treeMap:" + item); // key: dd cc bb aa
}
treeMap.clear();
treeMap.set("aa","3");
treeMap.set("dd","1");
treeMap.set("cc","2");
treeMap.set("bb","4");
numbers = Array.from(treeMap.keys())
for (let item of numbers) {
console.log("treeMap:" + item); //key: aa bb cc dd
}
- 情况二: 用户传入比较器,调用了TreeSet的clear方法后,比较器失效。
let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeSet.add("a");
treeSet.add("c");
treeSet.add("d");
treeSet.add("b");
let numbers = Array.from(treeSet.values())
for (let item of numbers) {
console.log("TreeSet:" + item); // value: d c b a
}
treeSet.clear();
treeSet.add("a");
treeSet.add("c");
treeSet.add("d");
treeSet.add("b");
numbers = Array.from(treeSet.values())
for (let item of numbers) {
console.log("TreeSet:" + item); // value: a b c d
}
变更后
- 情况一: 用户传入比较器,调用了TreeMap的clear方法后,比较器正常排序。
//使用comparator firstValue > secondValue,表示为降序排序。
let treeMap : TreeMap<string,string> = new TreeMap<string,string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeMap.set("aa","3");
treeMap.set("dd","1");
treeMap.set("cc","2");
treeMap.set("bb","4");
let numbers = Array.from(treeMap.keys())
for (let item of numbers) {
console.log("treeMap:" + item); // treeMap: dd cc bb aa
}
treeMap.clear();
treeMap.set("aa","3");
treeMap.set("dd","1");
treeMap.set("cc","2");
treeMap.set("bb","4");
numbers = Array.from(treeMap.keys())
for (let item of numbers) {
console.log("treeMap:" + item); // treeMap: dd cc bb aa
}
- 情况二: 用户传入比较器,调用了TreeSet的clear方法后,比较器正常排序。
let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeSet.add("a");
treeSet.add("c");
treeSet.add("d");
treeSet.add("b");
let numbers = Array.from(treeSet.values())
for (let item of numbers) {
console.log("TreeSet:" + item); // TreeSet: d c b a
}
treeSet.clear();
treeSet.add("a");
treeSet.add("c");
treeSet.add("d");
treeSet.add("b");
numbers = Array.from(treeSet.values())
for (let item of numbers) {
console.log("TreeSet:" + item); // TreeSet: d c b a
}
起始API Level
8
变更发生版本
从OpenHarmony SDK 5.0.0.32 版本开始。
变更的接口/组件
TreeMap.clear(); TreeSet.clear();
适配指导
TreeSet.clear()和TreeMap.clear()方法行为变更之后,用户无需重新设置比较器也能正常排序,也可以重新设置比较器来改变元素的排序方式。
文档可参考如下:
cl.arkts.2 TreeMap.setAll()接口行为变更
访问级别
公开接口
变更原因
使用setAll接口添加一个空的TreeMap,预期长度+0,实际长度+1。
变更影响
该变更为不兼容性变更,影响调用TreeMap.setAll()后TreeMap的长度。
- 变更前 使用setAll接口添加treeMap1后treeMap长度为1
let treeMap : TreeMap<string, number> = new TreeMap();
let treeMap1 : TreeMap<string, number> = new TreeMap();
treeMap.setAll(treeMap1); // 将treeMap1中的所有元素添加到treeMap中
console.info("length:", treeMap.length) // length:1
- 变更后 使用setAll接口添加treeMap1后treeMap长度为0
let treeMap : TreeMap<string, number> = new TreeMap();
let treeMap1 : TreeMap<string, number> = new TreeMap();
treeMap.setAll(treeMap1); // 将treeMap1中的所有元素添加到treeMap中
console.info("length:",treeMap.length) // length:0
起始API Level
8
变更发生版本
从OpenHarmony SDK 5.0.0.32 版本开始。
变更的接口/组件
TreeMap.setAll();
适配指导
对于TreeMap.setAll()传入空TreeMap的情况,开发者需要针对变更前后TreeMap的长度变化进行适配。
文档可参考如下:
cl.arkts.3 TreeMap、TreeSet的hasKey和has接口行为变更
访问级别
公开接口
变更原因
- 对于传入用户自定义比较器的TreeMap, 不能正确区分undefined或null与其他元素的比较关系,导致在没有插入null或undefined的情况下hasKey(null/undefined)错误返回true。
- 对于传入用户自定义比较器的TreeSet, 不能正确区分undefined或null与其他元素的比较关系,导致在没有插入null或undefined的情况下has(null/undefined)错误返回true。
变更影响
不兼容变更,影响TreeMap.hasKey()、TreeSet.has()传入undefined或null时的返回值。
变更前
情况一: 对于传入用户自定义比较器的TreeMap,在没有插入null或undefined的情况下hasKey(null/undefined)错误返回true。
let treeMap : TreeMap<string, number> = new TreeMap((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeMap.set("aa",3);
treeMap.set("dd",1);
let res = treeMap.hasKey(null);
let res1 = treeMap.hasKey(undefined);
console.info("res:", res) // res:true
console.info("res1:",res1) // res1:true
- 情况二: 对于传入用户自定义比较器的TreeSet,在没有插入null或undefined的情况下has(null/undefined)错误返回true。
let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeSet.add("a");
treeSet.add("c");
let res = treeSet.has(null);
let res1 = treeSet.has(undefined);
console.info("res:", res) // res:true
console.info("res1:",res1) // res1:true
变更后
情况一: 对于传入用户自定义比较器的TreeMap,在没有插入null或undefined的情况下hasKey(null/undefined)返回fasle。
let treeMap : TreeMap<string, number> = new TreeMap((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeMap.set("aa",3);
treeMap.set("dd",1);
let res = treeMap.hasKey(null);
let res1 = treeMap.hasKey(undefined);
console.info("res:", res) // res:false
console.info("res1:",res1) // res1:false
- 情况二: 对于传入用户自定义比较器的TreeSet,在没有插入null或undefined的情况下has(null/undefined)返回false。
let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
treeSet.add("a");
treeSet.add("c");
let res = treeSet.has(null);
let res1 = treeSet.has(undefined);
console.info("res:", res) // res:false
console.info("res1:",res1) // res1:false
起始API Level
8
变更发生版本
从OpenHarmony SDK 5.0.0.32 版本开始。
变更的接口/组件
TreeMap.hasKey(); TreeSet.has();
适配指导
对于TreeMap.hasKey()、TreeSet.has()接口传入null或undefined的情况。开发者需要针对变更前后返回值的变化进行适配。
文档可参考如下:
cl.arkts.4 URLParams类append接口添加的值中包含连续空格时行为变更
访问级别
公开接口
变更原因
URLParams类append接口添加的字符串中包含连续多个空格时,连续空格会被错误处理成只转换为一个’+‘,该实现不符合URL的标准。
变更影响
不兼容变更,影响URLParams.append()接口在入参包含连续空格时的处理结果。
起始 API Level
9
变更发生版本
从OpenHarmony SDK 5.0.0.32开始。
变更的接口/组件
URLParams对象的append接口。
变更前:URLParams对象使用append()方法添加键值对时,若添加的字符串中存在连续多个空格时,接口表现为将连续多个空格只转换为一个’+‘。
{
const objectParams = new url.URLParams("key=abc")
console.log(objectParams.toString()) // "key=abc"
objectParams.append('key1', 'd e f');
console.log(objectParams.toString()) // "key=abc&key1=d+e+f"
}
变更后:URLParams对象使用append()方法添加键值对时,若添加的字符串中存在连续多个空格时,接口表现为将连续多个空格转换为对应空格数量的’+‘。
{
const objectParams = new url.URLParams("key=abc")
console.log(objectParams.toString()) // "key=abc"
objectParams.append('key1', 'd e f');
console.log(objectParams.toString()) // "key=abc&key1=d+++e+++f"
}
适配指导
开发者在涉及上面append的使用场景时,在变更生效前如果对append添加的键值对做后续处理操作,变更后需针对表现不同做针对性适配。
cl.arkts.5 URLParams类在入参字符串中包含大小写不同编码值时,toString()接口表现结果不一致变更
访问级别
公开接口
变更原因
URLParams类在入参字符串中包含大小写不同编码值时toString()接口返回值有误,主要涉及:”%2b”和”%2B”的表现不一致,”%2B”被处理为”%2B”是符合标准的,但”%2b”会被错误处理成’+‘。
变更影响
不兼容变更,影响当URLParams构造函数入参字符串中存在”%2b”时URLParams.toString()的返回结果。
起始 API Level
9
变更发生版本
从OpenHarmony SDK 5.0.0.32开始。
变更的接口/组件
URL模块URLParams类toString接口,
变更前:创建URLParams对象,如果入参字符串中存在”%2b”和”%2B”时,在toString()后返回的字符串分别表现为”+“和”%2B”。
{
const objectParams = new url.URLParams("key%2b=abc%2B")
console.log(objectParams.toString()) // "key+=abc%2B"
}
变更后:创建URLParams对象,如果入参字符串中存在”%2b”和”%2B”时,在toString()后返回的字符串均表现为”%2B”;
{
const objectParams = new url.URLParams("key%2b=abc%2B")
console.log(objectParams.toString()) // "key%2B=abc%2B"
}
适配指导
开发者在涉及上述使用场景时,在变更生效前如果对toString()返回值做后续处理操作,变更后需针对表现不同做针对性适配。
cl.arkts.6 URLParams类append接口行为变更
访问级别
公开接口
变更原因
URLParams使用append()方法时,对入参键值对中的特殊字符会错误进行encode,该行为与URL标准不一致,导致后续对键值对进行增删改查等操作出现异常。
变更影响
不兼容变更,影响当URLParams.append()入参包含中文等特殊字符时该函数的处理结果。
起始 API Level
9
变更发生版本
从OpenHarmony SDK 5.0.0.32开始。
变更的接口/组件
URLParams类append接口。
变更前:URLParams使用append()方法添加键值对, 若想通过添加的key使用get、has、delete、set接口进行增删改查操作,需先对key进行额外encode。
{
const objectParams = new url.URLParams('?fod=1&bard=2')
objectParams.append("key&大", "abc");
objectParams.has('key&大'); // false
objectParams.has('%E5%A4%A7'); // true
objectParams.get('key&大'); // undefined
objectParams.get('%E5%A4%A7'); // abc
}
变更后: URLParams使用append()方法添加键值对,可直接使用添加的key拿到对应value进行增删改查操作。
{
const objectParams = new url.URLParams('?fod=1&bard=2')
objectParams.append("key&大", "abc");
objectParams.has('key&大'); // true
objectParams.has('%E5%A4%A7'); // false
objectParams.get('key&大'); // abc
objectParams.get('%E5%A4%A7'); // undefined
}
适配指导
对于URLParams.append()入参包含中文等特殊字符的情况。开发者需要针对变更前后调用has()、get()、delete()、set()传入这些字符时处理结果及返回值的变化进行适配。
你可能感兴趣的鸿蒙文章
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦