课程章节介绍
同学们,大家好,今天我们来聊聊 Apex 里访问修饰符那些事儿。这些修饰符就像是给方法和变量加上的“门禁卡”,控制着谁可以进来访问、谁不能。在 Apex 里,我们有四个访问级别:private、protected、public 和 global。
首先,如果你在一个方法或变量前面什么都不写,也就是不加任何修饰符,那它默认就是 private 的。意味着只有在定义它的那个类里面,其他方法才能看得见、用得着,出了这个类,外面就完全不知道它的存在了。这个默认行为很安全,帮我们藏起内部实现细节。
接下来是 protected。当你在方法或变量前写上 protected 关键字,它就变得稍微“友好”了一点。它允许两种朋友访问:一种是本类的内部类(也就是嵌套在里面的类),另一种是继承了这个类的子类。注意,即使是子类,也必须是在命名空间内通过继承关系才能看到。这让类的家族内部可以共享一些逻辑,但又不会完全暴露给外人。
然后是 public。在 Apex 里,public 的意思跟在 Java 里很不一样,大家一定要留心。在 Apex 中,public 只表示“在同一个命名空间(或者说同一个包、同一个应用程序)内是公开的”。换句话说,只要你写的代码和这个类在同一个 managed package 或者同一个 namespace 下,你就可以随便访问它;但假如另一个包或外部应用想调用,对不起,public 是挡不住的。所以,如果你想实现 Java 中那种“世界上任何代码都能访问”的效果,就不能用 public。
那真正能做到完全开放、跨应用程序访问的是哪个呢?就是 global。没错,global 修饰符让方法或变量能被任何 Apex 代码访问,不管它在哪个命名空间、哪个包里,甚至是在外部调用你应用程序接口的时候。这听起来很强大,但我们 Salesforce 官方其实非常不建议大家随便用 global。为什么呢?因为一旦你用了 global,就等于和其他应用建立了一种强依赖关系。后续你想修改这个方法签名或者删掉它,就会非常困难,因为你不知道有多少外部的代码在依赖它,维护成本会变得很高。所以,除非你明确知道这个方法需要被外部订阅者或扩展包调用,否则尽量别用 global。
好,我们简单总结一下:默认不写就是 private,仅本类可见;protected 开放给内部类和子类;public 在同一命名空间内公开;global 则是完全公开、跨应用的。记住 Apex 里的 public 不等同于 Java 的 public,Java 的 public 是 Apex 里的 global。下次写代码时,先想想“这个方法和变量到底需要让谁看见”,再决定用哪个修饰符,这样你的代码会更安全,也更容易维护。
今天的知识点就讲到这里,大家有什么疑问吗?我们下次继续深入 Apex 的其他特性。
关键词
Apex
Salesforce
Developer Guide