【问题标题】:Constructor cannot be applied to given types构造函数不能应用于给定类型
【发布时间】:2013-07-19 05:14:38
【问题描述】:

一直把我的头靠在墙上,这可能是一个我不太明白的简单问题。 我有这三个类,试图在它们之间传递对象/方法。

这是头等舱

public class LargeMapDriver  
{  
    public static void main(String[] args)  
    {  
    Scanner keyboard = new Scanner(System.in);  
    int value1;  

    ThyPoint p1 = new ThyPoint(132, 734);  
    ThyPoint p2 = new ThyPoint(56, 998);  
    ThyPoint p3 = new ThyPoint(100, 105);  

    System.out.println("Enter value: ");  
    order = keyboard.nextInt();  

    LargeMap myMap = new LargeMap(value1, p1, p2, p3); 

其次,指针类。

public class ThyPoint  
{  
    private int a;  
    private int b;  

    //constructor  
    public ThyPoint(int x, int y)  
    {  
        a = x;  
        b = y;  
    }  

    //...  

    //set and get methods for a and b... not shown

    //...  

    public String toString()  
    {  
        return "a: " + getValueA() + " b: " + getValueA();  
    }  
} 

最后一个类,显示构造函数错误。

public class LargeMap  
{  
    //GETTING CONSTRUCTOR(s) ERROR

    public static void goodMethod(int value1, ThyPoint p1, ThyPoint p2, ThyPoint p3)  
    {  
    if ( value1 == 0 )  
        System.out.println( p1.toString() + p2.toString() + p3.toString());  
    else 
        System.out.println( p2.toString() + p3.toString() + p1.toString());  
     }  
} 

好的,所以问题出现了:

**constructor LargeMap in class LargeMap cannot be applied to given types;
LargeMap myMap = new LargeMap(value1, p1, p2, p3);
                 ^
required: no arguments
found int,ThyPoint,ThyPoint,ThyPoint
reason: actual and formal arguments differ in length**

所以,我试图为 LargeMap 类创建一个构造函数,但失败了,我试图将 p1、p2、p3 对象中的这些值传递给构造函数以接受。并初始化它们中的值,我该怎么做?我要在其中初始化的值是:

    ThyPoint p1 = new ThyPoint(132, 734);  
    ThyPoint p2 = new ThyPoint(56, 998);  
    ThyPoint p3 = new ThyPoint(100, 105);  

LargeMap 类也必须保持为空。不过,它不必是静态的或公开的。

【问题讨论】:

    标签: java class object constructor


    【解决方案1】:

    您正在尝试使用未在“LargeMap”类中声明的构造函数
    在“LargeMap”类中声明这样的构造函数而不是 goodMethod() 方法

        public LargeMap(int value1, ThyPoint p1, ThyPoint p2, ThyPoint p3)  
        {  
           if ( value1 == 0 )  
             System.out.println( p1.toString() + p2.toString() + p3.toString());  
           else 
             System.out.println( p2.toString() + p3.toString() + p1.toString());  
        } 
    

    在您的情况下,您只能访问 java 编译器提供的默认构造函数(无参数构造函数)
    所以像上面那样编写你自己的构造函数。
    也可以直接调用静态方法

        LargeMap.goodMethod(value1, p1, p2, p3); 
    

    而不是创建对象。即,而不是代码中的以下行

       LargeMap myMap = new LargeMap(value1, p1, p2, p3); 
    

    【讨论】:

    • LargeMap 类也必须保持为空。不过,它不必是静态的或公开的。
    • “类 LargeMap 必须保持为空”到底是什么意思。?
    【解决方案2】:

    LargeMap 类没有完全接受四个参数的构造函数。在没有构造函数的情况下,只会有没有参数的默认构造函数,由Java自己添加。

    【讨论】:

    • 好的,所以如果我添加一个构造函数,例如: public LargeMap(int value1, ThyPoint p1, ThyPoint p2, ThyPoint p3) { //我在这里做什么? }
    • 这应该是您的应用程序逻辑。从您的代码中,我了解,您没有任何使用上述参数的方法。您只需要一个静态实用程序方法。如果你的类有这样一个简单的方法,你可以简单地创建像 LargeMap lm = new LargeMap(); 这样的对象。并且调用静态方法,根本不需要对象。
    • 我的方法将使用参数,我只是简化了它,对不起。此外,LargeMap 类必须保持无效。不过,它不必是静态的或公开的。
    【解决方案3】:

    也许发布您的构造函数代码可能会有所帮助..

    试试

    public LargeMap (int value1, ThyPoint p1, ThyPoint p2, ThyPoint p3) {
    
        //do whatever you want
    
    }
    

    【讨论】:

    • LargeMap 类也必须保持为空。不过,它不必是静态的或公开的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2014-09-18
    相关资源
    最近更新 更多