public MyLine(double x, double y)
{
MyLine p1 = new MyLine();
p1.x = x;
p1.y = y;
}
这是我的代码
我得到的错误是
./MyLine.java:12: cannot find symbol
symbol : constructor MyLine()
location: class MyLine
MyLine p1 = new MyLine();
答案 0 :(得分:7)
不要在构造函数中实例化它。只需指定:
this.x = x;
this.y = y;
错误告诉您没有无参数构造函数,但即使您有,但行为也不会像您期望的那样
答案 1 :(得分:6)
错误消息告诉您MyLine
类中没有无参数构造函数。
你可以创建一个让代码编译。
但是看起来您正试图在MyLine
构造函数中实例化MyLine
对象。你几乎肯定不想这样做。
相反,您希望将传递的值作为参数,并使用它们初始化当前对象的字段:
public MyLine(double x, double y)
{
this.x = x;
this.y = y;
}
答案 2 :(得分:1)
提供默认构造函数 即添加
public MyLine(){}
并且你正在为构造函数创建本地对象并将值赋给is ..
是没有意义的改为使用
this.x=x;
this.y=y;
答案 3 :(得分:0)
你正在MyLine的构造函数中构建一个MyLine实例。因此,您正在编写的构造函数的调用者将导致分配两个对象。这就是你想要的吗?
答案 4 :(得分:0)
你真的是在构建另一个MyLine对象时构造一个新的MyLine对象吗?
你真的有意这样做:
public MyLine(double x, double y)
{
this();
this.x = x;
this.y = y;
}
答案 5 :(得分:0)
你真的不应该在你的其他构造函数中实例化一个新的MyLine。为什么不简单地做:
public class MyLine {
private double slope;
private double constant;
// creates a new line: f(x) -> m*x + b
public MyLine(double m, double b) {
this.slope = m;
this.constant = b;
}
// ...
}
答案 6 :(得分:0)
这一行:
MyLine p1 = new MyLine();
应该删除。那是创建一个新实例,你实际上想要使用你正在创建的实例(因为你在构造函数中。)你得到错误,因为你从这行不存在的构造函数调用,但你不想这样做。
您可以使用this
关键字来引用当前实例(如果字段与参数具有相同的名称,则需要执行此操作,在这种情况下,它们看起来就是这样。)
因此,考虑到这一点,你最终会得到以下结论:
public MyLine(double x, double y) {
this.x = x;
this.y = y;
}
答案 7 :(得分:0)
问题是,一旦你自己创建了一个构造函数,比如public MyLine(double x, double y)
,编译器就不会自动添加public MyLine()
默认构造函数。
如果你想让它成为一个工厂方法,你应该返回p1并使其静止。