Bam*_*amx 5 android annotations androidx
我现在想知道使用 @SuppressLint("RestrictedApi") 注释是否安全。我很确定答案是否定的,所以我也想问为什么。
我猜开发团队想restricted code向 API 用户隐藏这些内容。可能是由于未来的变化或者因为代码旨在用作内部功能
示例代码androidx.preference:preference:1.1.1:
public abstract class CustomAdapterPreferenceFragment extends PreferenceFragmentCompat {
@Override
protected PreferenceGroupAdapter onCreateAdapter(PreferenceScreen preferenceScreen) {
// this annotation removes warning that says PreferenceGroupAdapter can only be called from package names that start with androidx.preference
@SuppressLint("RestrictedApi")
final PreferenceGroupAdapter adapter = new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
}
};
return adapter;
}
Run Code Online (Sandbox Code Playgroud)
链接到限制本示例中代码使用的注释:AOSP AndroidX
你是对的:这不安全。标记为 的符号@RestrictTo不被视为公共 API,并且可能在版本之间任意更改行为或签名。唯一的保证是它们不会破坏其他 AndroidX 库内部依赖的行为,并且该行为是什么尚未定义。
对于限制为单个库或库组(要求组内的所有库固定到同一版本)的符号尤其如此,因为无需维护与其他 AndroidX 库的不同版本的兼容性。
我猜开发团队是想向 API 用户隐藏此类受限代码。可能是由于未来的变化或者因为代码旨在用作内部功能
这是完全正确的。有时需要在内部公开一些作为公共 API 没有意义的功能,尽管我们通常会尽量避免这样做,因为这使得复制部分代码并自定义您自己的版本变得更加困难。对于 Java 代码尤其如此,它没有 Kotlin 的internal修饰符来将类公开给整个库(package-private 并没有真正解决这个问题)。
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |