草庐IT

more-private

全部标签

java - Private 就是 Private,那为什么 java 会提供使用反射来访问私有(private)方法的便利呢?

这个问题在这里已经有了答案:WhyisitallowedtoaccessJavaprivatefieldsviareflection?(7个答案)关闭6年前。使用反射时需要注意哪些潜在问题。我在反射(reflection)中很困惑,为什么java提供这种访问私有(private)数据成员的功能。私有(private):就像我想的那样,只有声明它的类才能看到它。那为什么可以访问其他类中的私有(private)事物呢?这个术语(反射)完全溢出了我对java中私有(private)(访问说明符)属性的概念。我访问了很多关于这个主题的链接,但没有给出关于这个主题的完整解释。例如:package

java - 访问父/子类加载器之间的包私有(private)元素

在Java应用程序中,我声明了两个类,一个类(One)在ClassLoaderA中声明,另一个类(Two)在ClassLoaderB中声明。ClassLoaderA是B的parent。这两个类都具有相同的包(即:org.test)。虽然A是B的父类加载器,但我似乎无法从Two事件访问One的包私有(private)方法或变量,我得到一个IllegalAccessError异常。我了解包私有(private)可访问性基于包名称和类加载器。有没有办法重新关联One和Two,以便Two可以访问One的封装私有(private)元素?下面是证明这一点的测试:packageorg.test;pu

java - 不可变类/对象,私有(private)构造函数,工厂方法

已经阅读了如何通过以下步骤使类不可变不要提供“setter”方法——修改字段或字段引用的对象的方法。将所有字段设为最终字段和私有(private)字段。不允许子类覆盖方法。最简单的方法是将类声明为final。一种更复杂的方法是将构造函数设为私有(private)并在工厂方法中构造实例。如果实例字段包含对可变对象的引用,则不允许更改这些对象:一种。不要提供修改可变对象的方法。b.不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。我不确定我是否清楚地理解私有(pr

java - 如何模拟私有(private) dao 变量?

我有一个dao.create()调用,我想在测试方法时对其进行模拟。但是我还是遗漏了一些东西,因为我仍然在接受NPE。这里有什么问题?classMyService{@InjectprivateDaodao;publicvoidmyMethod(){//..dao.create(object);//}}如何模拟dao.create()调用?@RunWith(PowerMockRunner.class)@PrepareForTest(DAO.class)publicvoidMyServiceTest{@TestpublicvoidtestMyMethod(){PowerMockito.mo

java - 什么时候应该使私有(private)成员成为静态的,在我的情况下这是如何被覆盖的

因为私有(private)方法是隐式最终的。私有(private)或静态或final方法是早期绑定(bind)意味着它们不能被覆盖。但在我的代码中它实际上运行正常。publicclassBextendsA{publicstaticvoidmain(String[]args){newB().privateMethod();//noerror-outputB-privateMethod.}privatevoidprivateMethod(){System.out.println("B-privateMethod.");}}classA{privatevoidprivateMethod(){

java - 枚举实践——在类内定义/单独定义,公开/私有(private)

定义枚举时什么是好的做法?例如,我有一个Person类。对于此类,我选择使用具有值MALE和FEMALE的枚举。枚举应该在Person类中定义还是单独定义?枚举应该定义为私有(private)的还是公共(public)的?此外,您是否有任何进一步的建议可以使枚举的使用尽可能灵活? 最佳答案 恕我直言,让它成为publicstaticenum里面classPerson.原因是enumGender仅适用于人,所以把它放在那里以便它们绑定(bind)在一起(如果没有人的上下文,性别就没有用)。优点:减少类膨胀如果您将Person移动到另一

java - 在使用 @JsonValue 反序列化类时,Jackson 更喜欢私有(private)构造函数而不是 @JsonCreator

我有一个带有私有(private)构造函数和静态工厂的简单类。我希望该类序列化为数字,所以我用@JsonValue注释了该字段的getter。然而,Jackson似乎更喜欢私有(private)构造函数而不是静态工厂,即使我用@JsonCreator注释静态工厂也是如此。如果我用@JsonIgnore注释私有(private)构造函数,它会起作用,但感觉有点不对劲。我看到一些帖子声称@JsonCreator只有在参数用@JsonProperty注释时才有效;但是,序列化为JSON对象的对象似乎就是这种情况。此对象被序列化为数字,因此没有属性可提供给注释。有什么我想念的吗?示例类:pac

java - 该方法只能设置 public/protected/private 之一

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭上个月。Improvethisquestion我正在实现一个接口(interface):publicinterfaceConsultant{//somedocumentationhereexplainingitshouldthrow3typesofexceptionsCellLocationsuggest(GameBoardgameBoard)

java - "private constructor capture"习语的 Java 示例是什么?

谁能给我解释一下私有(private)构造函数捕获习语,并指出我们真正需要/不需要这种设计的地方? 最佳答案 目的是在施工期间获取临时值(value)。JavaPuzzlers的解决方案53中给出了一个示例:publicclassMyThingextendsThing{privatefinalintarg;publicMyThing(){this(SomeOtherClass.func());}privateMyThing(inti){super(i);arg=i;}}在这种情况下,我们想要捕获并存储我们希望传递给父类(superc

java - 模式匹配 Java 正则表达式 - "One-or-more"运算符

如何在Java的正则表达式中使用“一个或多个”运算符?例如,我想匹配这个:((a)(b)(c))-匹配((a))-匹配其中a,b,c是任意字符或数字这个表达式的基本描述是一组括号中的一组括号,其中包含由一个空格分隔的所有集合 最佳答案 你想要类似的东西\((\(\w*\))+\)为了更清楚地说明它是如何工作的,在视觉上展开一下:\(#outerbracket(#startofgroup\(#innerbracket\w*#0ormorewordcharacters([0-9a-zA-Z_])\)#innerbracket)#endo