Я работаю над домашним заданием, поэтому я просто хочу исправить ошибку компиляции, чтобы продолжить работу над ней. Мне нужно создать класс PointList, который хранит список объектов Point в ArrayList. Класс PointList должен принимать любой объект, являющийся экземпляром класса 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
Если бы я мог просто скомпилировать его, чтобы продолжить работу над ним, я был бы очень благодарен.
Спасибо, я думаю, что у моего класса Point нет проблем, но я опубликую его на всякий случай. В какой-то момент у меня был метод добавления в моем классе PointList, но я удалил его. Я ломаю голову над этим с утра.
Ваш конструктор PointList требует, чтобы у вас был аргумент. Обратите внимание, что при создании экземпляра объекта PointList вы не передавали никаких данных. Я предлагаю вам пройтись по вашему объекту PointList, проверить оттуда и сказать мне, что вы думаете. Другое дело, для вашего класса PointList используйте преимущества наследования. PointList<E> расширяет список<E>
Если я использую что-то вроде этого PointList newPointList = new PointList(pointOne); Он работает, но не использует дженерики для создания экземпляра объекта. Я думал, что если бы я использовал <Point<Integer>>, он также передал бы точечный объект? Разве это не так?
Нет, он не передает объект Point. Он просто объявляет, что может принимать общий тип этого определенного объекта.
Я работаю над передачей данных в свой объект, это просто немного меня занимает. Спасибо, что указали мне правильное направление.




Ваш PointList имеет единственный конструктор с одним аргументом:
public PointList(E obj){
ArrayList<Point> myPoint = new ArrayList<Point>();
data = obj;
}
Но вы пытаетесь вызвать конструктор с нулевыми аргументами:
PointList<Point<Integer>> newPointList = new PointList<Point<Integer>>();
Таким образом, компилятор не может найти соответствующий. См. руководство по Предоставление конструкторов для ваших классов и Перегрузка конструктора в Java.
Для списка точек
// 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);
}
}
Как упоминалось в одном из комментариев, кажется, что есть несоответствие с вашим конструктором и созданием вашего объекта.
Спасибо, я добавил конструктор без аргументов! Теперь мне просто нужно выяснить, как распечатать значения массива, а не адрес памяти. Кажется, я не могу заставить работать расширения ArrayList<E>, чтобы я мог использовать метод toString. Я получаю сообщение об ошибке: добавить (E#1) в PointList невозможно реализовать добавление (E#2) в список. Что это обозначает?
Если вы хотите создать собственную реализацию add() в расширенном списке PointList, вы можете сделать следующее: @Override public boolean add(E e) { return super.add(e); }
Привет! добро пожаловать в СО! мы можем увидеть ваш точечный объект? и почему ваш объект PointList использует метод .add()?