相关疑难解决方法(0)

在类中为自己的字段使用getter/setter有什么好处吗?

通常,在我自己的项目中,我使用getter和setter进行任何字段访问,然后我按照我的工作做同样的事情.前段时间,我们项目的技术负责人问我为什么这样做,为什么这比仅仅使用字段本身更好(如果需要通过子类访问,可以选择声明它们受保护).我无法得出一个明确的答案.

那么,是否有任何理由在类的自己的字段中使用getter和setter,或者直接使用字段是否更好?

java

6
推荐指数
2
解决办法
2126
查看次数

LocalDate在LocalDate中具有私有访问权限

我试图找出某人的年龄.我按照这里给出的答案: 如何用Java计算某人的年龄?

这是我到目前为止:

public void setDOB(String day, String month, String year){

    LocalDate birthDate = new LocalDate(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day));
}
Run Code Online (Sandbox Code Playgroud)

我在声明birthDate变量时遇到错误.我收到以下错误:LocalDate(int,int,int)在LocalDate中具有私有访问权限.我不知道这个错误意味着什么,但我假设它与数据访问有关(例如私人,公共等)

java

6
推荐指数
1
解决办法
9068
查看次数

在Kotlin中进行测试无法访问受保护的方法

我想测试B类:

class B : A {
    override fun init() {
        // do work here
    }
}

class A {
    protected fun init() { } // will be called by internal logic
}
Run Code Online (Sandbox Code Playgroud)

并且在Java中调用没有问题:b.init()在测试方法中(测试类与测试对象在同一个包中),但在Kotlin编译器中抱怨:

无法访问'init':它在'B'中受到保护

@Test
fun `checks init`() {
    val b = B()
    b.init()
    // assert work done
}
Run Code Online (Sandbox Code Playgroud)

为什么不工作?如何解决此问题(我想避免将方法公开)?

unit-testing kotlin

6
推荐指数
2
解决办法
5312
查看次数

Java中未声明的类是公开的吗?

我开始学习java并在Eclipse中创建了我的第一个hello world函数.我注意到以下两个函数,都在我的java项目的src文件夹的默认包中,似乎做了同样的事情:

class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都成功打印'Hello World!' 到控制台.

我已经阅读了一些关于不同类类型的内容,但我不确定我将使用第一个函数声明什么类型的类.这两个功能有什么区别?java在第一种情况下公开我的hello world class吗?

java

5
推荐指数
1
解决办法
687
查看次数

变量具有私有访问权限

我正在尝试为矩形和椭圆形创建一个抽象形状类,我给形状赋予的唯一抽象方法是draw方法,但是在给它一个构造函数之后,矩形类中的所有内容给我一个错误,即颜色和其他变量具有私有访问权限,这是我的代码:

public abstract class Shape{
        private int x, y, width, height;
        private Color color;
        public Shape(int x, int y, int width, int height, Color color){
            setXY(x, y);
            setSize(width, height);
            setColor(color);
        }

        public boolean setXY(int x, int y){
            this.x=x;
            this.y=y;
            return true;
        }

        public boolean setSize(int width, int height){
            this.width=width;
            this.height=height;
            return true;
        }

        public boolean setColor(Color color){
            if(color==null)
                return false;
            this.color=color;
            return true;
        }

        public abstract void draw(Graphics g);
    }

    class Rectangle extends Shape{
        public Rectangle(int x, int y, int …
Run Code Online (Sandbox Code Playgroud)

java variables private subclass abstract

5
推荐指数
1
解决办法
4万
查看次数

Java中的访问修饰符与c ++相比

我在StackOverflow中看到了关于这个主题的一些讨论,但我没有看到一些帮助我理解以下内容的东西:

我来自C++背景,最近我开始学习Java.在C++中,当使用protected时,只有子类可以访问该成员(类似于Java中的Field).

在C++中,还有"朋友"类可以访问提供"友谊"的类的私有/受保护的成员.这有点类似于Java中的"package"字段修饰符(默认字段修饰符),除了在C++中友谊提供对所有私有成员的访问,但在Java中,来自同一包中的类的访问特定于类字段.

我无法理解的是,假设我只想访问子类,我可以在C++中通过声明受保护的成员不会"给予"友谊来实现这一点.

但是在Java中,我不知道怎么做,因为通过使用"protected"字段修饰符 - 我还可以访问包中的所有类.我发现这样做的唯一方法是声明受保护的字段并将类隔离在其包中.

从这里,我得出的结论是,一个包中的类的分组必须基于类之间的"友谊"来完成. 这确实是包装分组中的主要考虑因素吗?

另一件我不明白的事情,在Java中,假设我在A类中有两个字段:b,c.我想给b访问b而不是c,我想给c访问c而不是b.而对于"世界"我想要b,c被隐藏.怎么做到呢?我猜B,C应该和A在同一个包中.但是通过使用修饰符声明b,c 我让B,C访问b和c. Java中有没有办法做到这一点?

希望对这个问题有一些解释

java access-modifiers

5
推荐指数
1
解决办法
1721
查看次数

在Java中的继承方面受保护与公共

什么时候应该在创建超类时使用Java中的Public over Protected,如果程序在没有任何问题的情况下运行受保护的访问修饰符集,是否需要将其更改为Public?

java

5
推荐指数
1
解决办法
7573
查看次数

在JAVA中,没有字段标志在Class格式中意味着什么?

这是我的代码片段:

public class Test {

    public static void main(String[] args) {

        class EnglishHelloThere {
              int a=10;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我创建了一个本地类,以便在编译器中没有为本地类中的变量编写任何修饰符时,查看访问修饰符的类型.

这就是我在JAVAP中得到的

  Compiled from "Test.java"
class com.Test$1EnglishHelloThere
  SourceFile: "Test.java"
  EnclosingMethod: #21.#23                // com.Test.main
  InnerClasses:
       #27= #1; //EnglishHelloThere=class com/Test$1EnglishHelloThere
  minor version: 0
  major version: 51
  flags: ACC_SUPER
Constant pool:
   #1 = Class              #2             //  com/Test$1EnglishHelloThere
   #2 = Utf8               com/Test$1EnglishHelloThere
   #3 = Class              #4             //  java/lang/Object
   #4 = Utf8               java/lang/Object
   #5 = Utf8               a
   #6 = Utf8               I
   #7 = Utf8               <init>
   #8 …
Run Code Online (Sandbox Code Playgroud)

java javap

5
推荐指数
1
解决办法
195
查看次数

在 Java 方法中省略 public 修饰符

我正在学习 Java,有一些事情困扰着我,教科书没有解释它。

我知道您使用修饰符来声明类和所有内部的方法。但我突然上了一堂课,宣布像

static void(){
}
Run Code Online (Sandbox Code Playgroud)

为什么没有 public 或 private 修饰符,它仍然有效?我可以避免在其他地方使用 public 修饰符吗,或者它是如何工作的?我知道静态意味着该类的成员,而它不返回值则表示无效。然而,为什么不是公共或私人的。

java methods class subroutine

5
推荐指数
1
解决办法
8578
查看次数

Jackson:没有找到类~~~~~的序列化程序,也没有发现创建 BeanSerializer 的属性

我有一个类的 ArrayList,如下所示:

public class Person {
    String name;
    String age 
    List<String> education = new ArrayList<String> ();
    List<String> family = new ArrayList<String> (); 
    List<String> previousjobs = new ArrayList<String>(); 
}
Run Code Online (Sandbox Code Playgroud)

我想将此列表编写为 Json 并尝试使用以下代码:

Writer out = new PrintWriter("./test.json");
mapper.writerWithDefaultPrettyPrinter().writeValueas(out, persons);
Run Code Online (Sandbox Code Playgroud)

并收到此错误消息:

没有找到类~~~~~~ 的序列化器,也没有发现创建 BeanSerializer 的属性(为了避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:java.util.ArrayList[0])`

我尝试添加,mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)但由于某些未知原因,它使所有人员对象都为空。

我怎么了?

java serialization json jackson

5
推荐指数
1
解决办法
7992
查看次数