这有什么问题?找不到标志。符号 - 构造函数

时间:2011-03-09 09:56:01

标签: java

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();

8 个答案:

答案 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并使其静止。