如何限制开发者使用反射访问Java中的私有(private)方法和构造函数?使用普通的Java代码,我们无法访问类之外的私有(private)构造函数或私有(private)方法。但是通过使用反射,我们可以访问Java类中的任何私有(private)方法和构造函数。那么我们怎样才能为我们的Java代码提供安全性呢? 最佳答案 使用SecurityManager运行您的应用程序和一个足够严格的securitypolicy.有一个shortsummaryinthetutorialthesecuritydocumentation中的大量信
classA{privateintfoo;voidbar(Bb){b.foo=42;}}classBextendsA{}编译失败,报错:A.java:3:error:foohasprivateaccessinAvoidbar(Bb){b.foo=42;}^1error向基类添加强制转换使其工作。voidbar(Bb){((A)b).foo=42;}有人能解释一下为什么第一个片段是非法的吗?被禁止的原因是什么?这是JLS说:Otherwise,thememberorconstructorisdeclaredprivate,andaccessispermittedifandonlyifit
classA{privateintfoo;voidbar(Bb){b.foo=42;}}classBextendsA{}编译失败,报错:A.java:3:error:foohasprivateaccessinAvoidbar(Bb){b.foo=42;}^1error向基类添加强制转换使其工作。voidbar(Bb){((A)b).foo=42;}有人能解释一下为什么第一个片段是非法的吗?被禁止的原因是什么?这是JLS说:Otherwise,thememberorconstructorisdeclaredprivate,andaccessispermittedifandonlyifit
考虑以下代码:publicclassA{publicstaticvoidmain(String[]args){Runnabletest1=((I)(newI(){}))::test;//compilesOKRunnabletest2=((newI(){}))::test;//won'tcompile}interfaceI{privatevoidtest(){}}}我真的不明白这一点...我知道test()方法是private。但是,如果我们将匿名类强制转换为它的接口(interface)((I)(newI(){})),会发生什么变化?更准确地说,我希望看到一个允许该技巧的特定JLS点。
考虑以下代码:publicclassA{publicstaticvoidmain(String[]args){Runnabletest1=((I)(newI(){}))::test;//compilesOKRunnabletest2=((newI(){}))::test;//won'tcompile}interfaceI{privatevoidtest(){}}}我真的不明白这一点...我知道test()方法是private。但是,如果我们将匿名类强制转换为它的接口(interface)((I)(newI(){})),会发生什么变化?更准确地说,我希望看到一个允许该技巧的特定JLS点。
我正在尝试从命令行使用Gradle构建一个Android项目,但是当我想更改目录结构时发现了一个问题。目前是这样的:.└──main├──AndroidManifest.xml├──ic_launcher-web.png├──java│└──com│└──myproject│└──MainActivity.java└──res├──...├──layout│├──activity_main.xml│└──fragment_main.xml├──......然后我执行:./gradlewcleanbuild结尾是:BUILDSUCCESSFUL好的。一切都好。但是现在我想新建一个目录,所
我正在尝试从命令行使用Gradle构建一个Android项目,但是当我想更改目录结构时发现了一个问题。目前是这样的:.└──main├──AndroidManifest.xml├──ic_launcher-web.png├──java│└──com│└──myproject│└──MainActivity.java└──res├──...├──layout│├──activity_main.xml│└──fragment_main.xml├──......然后我执行:./gradlewcleanbuild结尾是:BUILDSUCCESSFUL好的。一切都好。但是现在我想新建一个目录,所
这更像是一个谜题而不是问题。我有以下代码:publicclassPrivateBaseConstructor{publicstaticclassBaseClass{privateBaseClass(){}}publicstaticclassDerivedClassextendsBaseClass{publicDerivedClass(){super();//1*}}}这里允许在1*处调用super();,即使基类构造函数是private。如果我们将这些类写成同一个包中的单独类:BClass.javapublicclassBClass{privateBClass(){}}DClass.j
这更像是一个谜题而不是问题。我有以下代码:publicclassPrivateBaseConstructor{publicstaticclassBaseClass{privateBaseClass(){}}publicstaticclassDerivedClassextendsBaseClass{publicDerivedClass(){super();//1*}}}这里允许在1*处调用super();,即使基类构造函数是private。如果我们将这些类写成同一个包中的单独类:BClass.javapublicclassBClass{privateBClass(){}}DClass.j
我已经使用OSGi有一段时间了,但我仍然不了解私有(private)包。导出的包是对其他包可见的包导入的包是由导出包的bundle导入的包。私有(private)包是对其他包不可见的包(我不明白)不是所有未导出的bundle对所有其他包都不可见吗?如果是这样,私有(private)包和不导出的包有什么区别?我已经阅读了OSGiinAction和“OSGi和ApacheFelix3.0-初学者指南”,但我无法找到其中的区别。 最佳答案 没有区别。Export-Package中未列出的任何包都是私有(private)的……仅此而已。您可