这几天在看安卓系统任务列表样式的源码时,发现一个public的静态内部内的public方法无法被外界调用,起了个怪了,代码如下:
ActivityManager.TaskDescription taskDescription = new ActivityManager.TaskDescription("", 00);
getActivity().setTaskDescription(taskDescription);
taskDescription.setLabel("测试APP");
public的方法为啥不能调用呢?
摸索了很久不得其解,最后问了几个朋友,有个基友给出了答案,牛x!
原来Java类、成员变量和方法注释有个@hide标签,作用就是不让外界调用public的此类、成员变量或者方法,接着再看,
看到了吗?代码行数少了几行,还有一个竖杠,哈哈,然后把鼠标移动到行数空间或者竖杠位置,
行数空间那里出现了一个笔的图标,点它,
@hide标签出现了,隐藏太深了;
然后我也写了一个类,试试这个牛X闪闪的标签呢,代码如下:
package co.coo.cooo;
public class Test {
/**
* @hide
*/
public String s = "";
/**
* @hide
*/
public static class TT {
/**
* {@hide}
*/
public String ss = "";
/**
* @hide
*/
public void sett() {
}
}
}
发现并没有卵用,完全无法生效;
后来经过研究,原来需要把Java文件打包成.jar文件,依赖使用,于是,打成jar,
直接包含此文件的目录压缩为.zip文件,然后重命名为.jar,然后让项目依赖,如图:
看到了吗?@hide生效了;
为啥需要这么一个标签呢?
直接private修饰不行吗?
据说,这是为了给系统APP调用的类、成员变量和方法,外界是不允许调用的;
有没有一种方案可以调用呢?
有,反射!
好了,又可以愉快玩耍了。