我觉得这肯定不是一个好习惯,但Java是否提供了任何阻止访问包私有方法/属性的机制?如果没有,这是否意味着:
package com.other_people_other_company;
public class MyClass {
// Let's hack! Access all package privates
}
有效吗?
在答案中提到:
Name: myCompany/myPackage/
Sealed: true
这是我的新信息。但是,如果我通过分发我的罐子并在那里密封其他人的包装来破坏呢?例如。 Name: org.apache Sealed: true
答案 0 :(得分:2)
假设.JAR分发,您可以seal the packages向META-INF/MANIFEST.MF
添加以下行:
Name: myCompany/myPackage/
Sealed: true
一些注意事项:
答案 1 :(得分:0)
是的,这是真的。在这个想法上某种"补丁"方法基于:当您必须修复3d-party库中的某些错误时,您可以在类路径中创建具有相同类的相同包,并创建固定类。
唯一的限制是特殊包名称,例如java.util
,例如尽管java.util.Tripwire
类具有包本地访问修饰符:
package java.util;
public class TestTripwire {
public static void main(String[] args) {
Tripwire.trip(Object.class, "sss");
}
}
但是如果你运行它,你将获得异常Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util