private_class_greeter
全部标签 目前我们正在运行checkstyle在我们的代码库中,它会标记所有不使用private访问修饰符的非静态类字段。这是一个有效的checkstyle规则,还是在某些情况下需要非私有(private)字段?例如,我认为JUnit测试用例在同一个包中创建的原因是它们可以使用default访问修饰符访问字段? 最佳答案 面向对象编程的主要特征之一是信息隐藏/封装。这意味着类只允许通过接口(interface)访问成员变量:getter和setter方法。因此其他类无法访问成员变量并以不需要的方式修改它们。所以checkstyle规则是有效的
我想管理类的ArrayList。例如,我有3种类型的过滤器:TextFilter、DurationFilter和扩展Filter的TimeFilter。这似乎是正确的:Listfilters=newArrayList();filters.add(TextFilter.class);filters.add(DurationFilter.class);filters.add(TimeFilter.class);但是现在我想用来限制ArrayList类型Listfilters=newArrayList();filters.add(TextFilter.class);filters.add(D
老实说,这是一个小问题,但它让我无法继续使用我的小型Java练习应用程序。我目前正在练习用Java进行API调用。我试图创建一个名为“Film”的简单类文件。但是,当我尝试将其创建为类文件时,Intelli-J一直告诉我它无法创建类文件。我正在尝试将此文件设置在名为“models”的文件夹中。所有这些类文件都将用作执行API调用的应用程序的一部分。有没有我没有遵循的命名约定?我一直在谷歌搜索,但没有真正找到任何东西。 最佳答案 更直接地说,根据@VishalJumani提到的内容,您需要告诉IntelliJ哪些目录是“源”或“测试”
您好,我已经在Java中使用过反射。但是,如果您使用的是Java标准(例如注入(inject)私有(private)字段),则必须编写大量代码才能完成工作。在Java对象中注入(inject)私有(private)字段的最短方法是什么?在广泛使用和生产就绪的库中是否有实现? 最佳答案 在不使用外部库的情况下,您需要:获取Field实例将字段实例设置为可访问设置新值如下:Fieldf1=obj.getClass().getDeclaredField("field");f1.setAccessible(true);f1.set(ob
我正在尝试使用反射从父类(superclass)型引用变量中获取注释详细信息,以使该方法接受所有子类型。但是isAnnotationPresent()返回false。与其他注解相关的方法相同。如果用于确切的类型,则输出符合预期。我知道注释信息将在对象上可用,即使我通过父类(superclass)型引用也是如此。@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})public@interfaceTable{Stringname();}@Table(name="some_table")publicclassSomeEn
假设有一个类,其所有构造函数都声明为私有(private)的。例如:publicclassThis{privateThis(){}publicsomeMethod(){//somethinghere}//somemore--nootherconstructors}据我所知,将所有构造函数设为私有(private)类似于将“This”类声明为final——这样它就无法扩展。但是,我收到的Eclipse消息给我的印象是这是可能的——可以扩展全构造函数私有(private)类。看看这个:当我尝试用类似的东西扩展这个类时publicclassThatextendsThis{...}Eclips
我的类是线程安全的吗?如果不是,为什么?classFoo{booleanb=false;voiddoSomething()throwsException{while(b)Thread.sleep();}voidsetB(booleanb){this.b=b;}} 最佳答案 代码不是线程安全的,因为正在运行的线程可能会看到更改,直到代码被编译(可能在稍后的随机点)并且您不再看到更改。顺便说一句:这使得测试变得非常困难。例如如果您睡1秒钟,您可能会在将近三个小时内看不到这种行为。即它可能有效,也可能无效,你不能仅仅因为它有效就说它会继续
我有以下类(class):classfoo{publicvoida(){print("a");}publicvoidb(){a();}}classbarextendsfoo{publicvoida(){print("overwrittena");}}当我现在调用bar.b()时,我希望它调用foo中重写的方法a()。但是,它确实会打印“a”。 最佳答案 你的两个类在不同的包中吗?你的foo类方法是声明为public、protected、private还是packagelocal?显然,如果他们是私有(private)的,这将行不通。
我看到一些Java示例使用this关键字来获取父类(superclass)方法。示例:this.superClassMethod()。通常情况下我们会使用super。有人可以举例说明为什么开发人员使用this而不是super吗?谢谢你。 最佳答案 this.method()和super.method()没有区别,直到method()得到在调用者的类中覆盖。例如,用classSuperClass{publicvoidmethod(){System.out.println("SuperClass");}}classSubClassext
我有代码使用其setter方法在对象上设置值。其中一个setter将Enum类型作为方法参数。代码看起来像这样:Stringvalue="EnumValue1";Methodsetter=getBeanWriteMethod("setMyEnumValue");Classtype=setter.getParameterTypes()[0];ObjectconvertedValue=null;if(type.isEnum()){convertedValue=convertToEnum(value,type);}else{convertedValue=ClassUtils.convertT