当前位置: 首页 > 知识库问答 >
问题:

Java构造函数中的泛型错误不能应用于给定类型

屈俊远
2023-03-14

我正在做作业,所以我只想修复我的编译错误,这样我就可以继续工作了。我需要创建一个PointList类,在ArrayList中保存一个Point对象列表。PointList类应该接受任何作为Point类实例或Point子类的对象。

我不断收到一个编译器错误,上面写着

> required: Point<Integer>
  found: no arguments
  reason: actual and formal argument lists differ in length
  where E is a type-variable:
  E extends Object declared in class PointList

我真的不明白我错过了什么,我已经通读了这本书,似乎不明白为什么我会得到这个错误。我已经制作了 Point 类并完成了测试,但似乎无法编译它。

public class PointListTest{

public static void main(String[] args){

//create point ints
Point<Integer> pointOne = new Point<Integer>(1,2);
Point<Integer> pointTwo = new Point<Integer>(3,4);
Point<Integer> pointThree = new Point<Integer>(5,6);

//make object PointList pointlist for int
PointList<Point<Integer>> newPointList = new PointList<Point<Integer>>();

//add points to list
newPointList.add(pointOne);
newPointList.add(pointTwo);
newPointList.add(pointThree);

这是我到目前为止对PointList的看法

public class PointList<E>{

   private ArrayList<Point> myPoint;

   E data;

   public PointList(E obj){

      ArrayList<Point> myPoint = new ArrayList<Point>();

      data = obj;

   }

}

点类

public class Point<T extends Number>{

//field values
private T xCordinate;
private T yCordinate;

//constructor
//@param x the x cordinate
//@param y the y cordinate
public Point(T x, T y){
   xCordinate = x;
   yCordinate = y;
}//end constructor

public void setX(T x){

   xCordinate = x;

}//end setX

public void setY(T y){

   yCordinate = y;

}//end setY

public T getX(){

   return xCordinate;

}//end getX

public T getY(){

   return yCordinate;

}//end getY

}//end pointlist

如果我能编译它,这样我就可以继续工作,我会非常感激。

共有2个答案

欧阳楚
2023-03-14

对于点列表

// Take advantage of inheritance
public class PointList<E> extends ArrayList<E> {
   // This object will now have the methods
}

用法

// If you're using Java 8 onwards, you may not need to specify the type upon instantiation
PointList<Point<Integer>> pointList = new PointList<>();
pointList.add(new Point<Integer>(x, y));

如果您想使用自己的PointList

public class PointList<E> {
   private List<E> dataList;

   public PointList() {
      dataList = new ArrayList<>();
   }

   public void add(E obj) {
      dataList.add(obj);
   }
}

正如其中一条评论所提到的,似乎与构造函数和对象创建不匹配。

丘浩宕
2023-03-14

您的 PointList 具有唯一带有一个参数的构造函数:

public PointList(E obj){

      ArrayList<Point> myPoint = new ArrayList<Point>();

      data = obj;

}

但是你尝试用零参数调用构造函数:

PointList<Point<Integer>> newPointList = new PointList<Point<Integer>>();

因此,编译器找不到相应的编译器。请参阅Java中的为类提供构造函数教程和构造函数重载。

 类似资料:
  • 在问我的问题之前,我想把一些事情说清楚。首先,我是Java和编程的新手。第二,这是我的第一个帖子,所以如果我做错了什么,请宽容对待我。最后,我不想要任何具体的解决办法,我的任务在任何回应这篇文章。这些问题要我来解决。我想要的是一个解释,为什么我的测试代码不能编译/运行。为了更好地理解这个问题,我将粘贴赋值信息,然后是给定的驱动程序类,然后是驱动程序类访问的我的类代码。我的编译器错误显示在标题中,但

  • 我有2个子类:职员、学生,他们属于超类人。 以下是我的老师给出的代码(任务): 我不知道我可以输入什么来创建一个没有参数的对象。它总是出现这样的错误:Person类中的构造函数Person不能应用于给定的类型;必选:java.lang.String,int 我在网上查过,有两种方法可以解决这个问题: > < li> 在超类中添加默认值:< code > Person()//不带参数。 在子类学生中

  • 我得到了下面的代码,使用数组来查找一些prim数。然而,当试图编译我的用户类PalindromeArrayUser时,它说——“类中的构造函数不能应用于给定的类型” 要求:int。找到:没有论点。原因:实际参数和正式参数列表的长度不同。 但是,我已经向构造器传递了一个int值(与我的蓝图中设计的方式相同)。我不太明白问题来自哪里。谢谢。 这是我的两节课 而这就是我的用户类问题的来源。上面的类编译良

  • 问题内容: 我有以下Java代码: 而且我不断收到错误消息:“无法将构造函数应用于给定类型” …这是否意味着超类的子类在构造函数中必须具有与超类相同数量的参数?我已经把头撞在墙上一个小时了。 问题答案: 子类不必有“相同数量的构造为超参数”任何构造函数,但它 确实 需要调用一些它的父类的构造函数从自己的构造。 如果超类具有no- arg构造函数,则默认情况下会被调用,如果省略了对超类构造函数的显式

  • 我不理解这个错误。据我所知,我已经成为了建设者。 错误:(12,46)java:com类中的构造函数FitnessEmployees。公司FitnessEmployees不能应用于给定类型;必需:java。lang.String,java。字符串,int,double,java。lang.String,java。找到lang.String:没有参数原因:实际参数列表和形式参数列表长度不同 我的班级

  • 我正在制作一类要对复数执行的函数。当我创建一个新对象时,我收到以下错误: 错误:ComplexNumbers类中的构造函数ComplexNumbers无法应用于给定类型;复数c1=新复数(real1,imaginary1);^必需:未找到参数:int,int原因:实际参数列表和形式参数列表长度不同 错误:ComplexNumbers类中的构造函数ComplexNumbers不能应用于给定的类型;C