先引入一下我们team的一个需求处理
https://note.youdao.com/ynoteshare1/index.html?id=a262b6b15e67b9423b207d0cee11c5c3&type=note
其中用到了
public boolean internalElementValid(String ln) {
boolean flag = false;
int ci = ln.indexOf('#');
if (ci >= 0) {
ln = ln.substring(0, ci);
}
ln = ln.trim();
int n = ln.length();
if (n != 0) {
if ((ln.indexOf(' ') >= 0) || (ln.indexOf('\t') >= 0)) {
log.error("Illegal configuration-file syntax");
flag = true;
}
int cp = ln.codePointAt(0);
if (!Character.isJavaIdentifierStart(cp)) {
log.error("Illegal provider-service path: " + ln);
flag = true;
}
for (int i = Character.charCount(cp); i < n; i += Character.charCount(cp)) {
cp = ln.codePointAt(i);
if (!Character.isJavaIdentifierPart(cp) && (cp != '.')) {
log.error("Illegal provider-service path: " + ln);
flag = true;
}
}
}
return flag;
}
}
这个方法是干什么的我们分析一下。
拿出每一个字符的代码点(codePoint又可以称谓代码单元)然后每一个方法去判断是否符合javaIdentifieri,是否符合java可使用的标识符。
java标识符: 用来表示类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符。
规则:
1.只有字母(区分大小写),下划线,美元符号和数字组成,长度不受限制。
注:字母包括英文26个字母 ,汉字,日文,朝鲜文,俄文,希腊字母等。
2.第一个字母不能是数字。
3.不能是关键字
关键字(50):abstract assert boolean break byte case catch char class const continue default
do double else enum extends final finally float for goto if implements import instanceof
int interface long native new package private protected public return short static strictfp
super switch synchronized this throw throws transient try void volatile while
4.不能是true false null(尽管三个都不是关键字)---------------------
那么我是怎么知道这个方法的
如下:
在java.uti.ServiceLoader这个类中已经有过验证,
作为一次实践,也作为一次学习~