当我编写以下代码时,编译器如何不报错?publicclassMyClass{privateintcount;publicMyClass(intx){this.count=x;}publicvoidtestPrivate(MyClasso){System.out.println(o.count);}}即使它是编写testPrivate的同一类的实例,它不应该在System.out.println(o.count)处给出编译错误?毕竟,我是在尝试直接访问私有(private)变量。代码甚至运行良好。 最佳答案 可以从声明它的类中的任何方
考虑这个例子:importjava.lang.reflect.Field;publicclassTest{publicstaticvoidmain(String[]args){Cc=newC();try{Fieldf=C.class.getDeclaredField("a");f.setAccessible(true);Integeri=(Integer)f.get(c);System.out.println(i);}catch(Exceptione){}}}classC{privateIntegera=6;}允许您通过反射访问类的私有(private)字段似乎不合逻辑。为什么会有这样
要提取常量,我可以使用ctrl+alt+c,即“提取”创建public常量:publicstaticfinalStringCONST="123";所以我需要手动键入私有(private)。有没有办法在默认情况下提取具有私有(private)范围的常量? 最佳答案 点击ctrl+alt+c两次(显示ExtractConstant对话框)点击alt+v(将默认Visibility设置为Private)点击回车完成:)私有(private)范围设置为默认值-因此您可以像以前一样使用常量提取,更改默认范围只需重复上述步骤并选择不同的范围。
我没有在Java中获得@Inherited注释。如果它自动为您继承方法,那么如果我需要以自己的方式实现该方法,那又如何呢?它将如何知道我的实现方式?另外据说如果我不想使用它,而是以老式的Java方式来做,我必须实现equals()、toString(),Object类的hashCode()方法,以及java.lang.annotation.Annotation类的注解类型方法.这是为什么呢?即使我不知道@Inherited注释和过去也可以正常工作的程序,我也从未实现过这些。请有人从头开始解释一下。 最佳答案 只是没有误解:您确实询问
为什么Java不允许将顶级类声明为私有(private)?除了“我们无法访问私有(private)类(class)”之外,还有其他原因吗? 最佳答案 私有(private)的顶级类完全没有用,因为没有人可以访问它。 关于java-为什么我们不能将顶级类定义为私有(private)的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1913863/
在Java中,变量应该保持私有(private)以实现更好的封装,但是静态常量呢?这个:publicstaticfinalintFOO=5;结果与此等价:privatestaticfinalintFOO=5;...publicstaticgetFoo(){returnFOO;}但哪种做法更好? 最佳答案 不直接在代码中使用常量的原因之一。假设FOO稍后可能会更改(但仍保持不变),例如publicstaticfinalintFOO=10;。只要没有人愚蠢到直接硬编码值,就不应该破坏任何东西吗?没有。Java编译器会将上面的Foo等常量
我正在做大学项目。我需要从类里面获取所有字段。甚至私有(private)和继承。我试图获取所有声明的字段,然后转换为父类(superclass)并重复。我的代码片段:privatevoidlistAllFields(Objectobj){ListfieldList=newArrayList();while(obj!=null){fieldList.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));obj=obj.getClass().getSuperclass().cast(obj);}//restofcode但它不起作
我有这样的枚举:publicenumConfiguration{XML(1),XSLT(10),TXT(100),HTML(2),DB(20);privatefinalintid;privateConfiguration(intid){this.id=id;}publicintgetId(){returnid;}}有时我需要检查枚举中有多少个字段。什么是最好的解决方案?我应该使用方法“values().length”吗?或者,我必须像这样在枚举中创建常量字段:publicenumConfiguration{XML(1),XSLT(10),TXT(100),HTML(2),DB(20);
我想调用一个私有(private)静态方法。我有它的名字。我听说可以使用Java反射机制来完成。我该怎么做?编辑:我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法接收一个参数,它的类型是Map。因此我不能做Map.TYPE(在运行时没有Map这样的东西,因为Java类型删除)。有没有其他方法获取方法? 最佳答案 假设你想调用MyClass.myMethod(intx);Methodm=MyClass.class.getDeclaredMethod("myMethod",Integer.TYPE);m.setAcce
正如所言here,在Java中覆盖私有(private)方法是无效的,因为父类的私有(private)方法是“自动最终的,并且对派生类隐藏”。我的问题主要是学术性的。不允许父类的私有(private)方法被“覆盖”(即,在子类中独立实现,具有相同的签名),这如何不违反封装?父类的私有(private)方法不能被子类访问或继承,符合封装原则。它被隐藏了。那么,为什么要限制子类实现具有相同名称/签名的自己的方法?这是否有良好的理论基础,或者这只是某种务实的解决方案?其他语言(C++或C#)对此有不同的规定吗? 最佳答案 您不能覆盖私有(