繁体   English   中英

使用 String 时,构造函数不能应用于给定类型

[英]Constructor cannot be applied to given type when using String

谁能告诉我在创建构造函数以调用另一个类文件中的方法时出错的地方。 它告诉我构造函数不能应用于给定类型

如果从 Student 类中删除构造函数声明,则隐式空构造函数将存在。 但是,如果您显式声明了一个像public Student(String firstname, String surname, String total)这样的构造函数,那么空构造函数将不可用,除非您将它显式添加到您的类中。

public Student() { };

然后你调用不存在的方法:

newStudent.firstName("my name");

您要调用的方法,如在您的 Student 对象中声明的那样是setFirstName(String firstName)

最后,在 println 调用中,您尝试直接访问对象的属性,而不是使用 getter 方法。

你 Student 类没有像你那样的空构造函数:

Student newStudent = new Student();

所以你有一个构造函数,它应该接受三个 String :

public Student(String firstname, String surname, String total) {

因此,要解决您的问题,您有两种方法:

第一

创建一个不接受任何属性的空构造函数,如下所示:

public Student() {
}

并且您可以将您的值与 setAtt 例如:

newStudent.setFirstName("my name");

2次

你应该像这样用三个值调用你的构造函数:

Student newStudent = new Student("name 1", "name 2", "name 3");

笔记

您不能像这样为另一个类中的属性设置值:

newStudent.firstName("my name");

你可以这样做:

newStudent.firstName = "my name";

我为更正代码所做的一些更改:

public class Main {
    public static void main(String[] args) {
        Student newStudent = new Student("Toto", "FromStack");
        newStudent.setFirstName("Jack");
        System.out.println(newStudent.getFirstName());
        System.out.println(newStudent.getSurname());
        System.out.println(newStudent.getFullName());
    }
}
  • 您必须使用大量参数调用constructor函数

  • 最好将参数的可见性设置为private (查看Student )并使用Getters来访问它们

  • 还可以使用Setters来更改值

这里也是:

public class Student {
    private String firstName;
    private String surname;

    public Student(String firstname, String surname) {
        this.firstName = firstname;
        this.surname = surname;
    }
    // First Name GETTER
    public String getFirstName() {
        return firstName;
    }
    // First Name SETTER
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    // Surname GETTER
    public String getSurname() {
        return surname;
    }
    // Surname SETTER
    public void setSurname(String surname) {
        this.surname = surname;
    }
    //Full Name GETTER
    public String getFullName() {
        return firstName+" "+surname;
    }
}
  • 如果您使用 Eclipse IDE,它可以为您创建 Getter 和 Setter(在Source

  • 您不需要total属性,因为它只是其他 2 个属性的串联,您永远不会单独更改它,如果它发生更改,那将是因为 2 个属性之一发生了更改,因此只需一个getFulName()取回两个名字

最后,如果您想在之后设置值,则可以创建一个空的构造函数, =""不会为每个获得“空”值

 public Student() {
            this.firstName = "";
            this.surname = "";
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM