Ошибка несоответствия привязки при использовании обобщенных элементов для массива объектов - PullRequest
0 голосов
/ 16 сентября 2018

Я использовал сопоставимый интерфейс и раньше, но использовал его с общими объектами, а второй объект вызывал у меня некоторые трудности

Вот моя программа драйвера

import java.io.*;
import java.util.*;
public class Prog2 {
public static void main (String[]args){

    //Declare Variables 
        Scanner inFile = null;
        ListArray<Part> partArray = new ListArray<Part>(13);


    //Open the file
        try {
            inFile = new Scanner(new File("parts.txt"));
        }        
     //If the file is not found, end the program   
        catch(FileNotFoundException e){
            System.out.println("Error: File not found");
            System.exit(0);
        }  
      //While the file has new text, read it in  
        while(inFile.hasNext()){
        //Read a line of code in    
            String temp = inFile.nextLine();
        //split the line into an array  
            String[] tempA = temp.split(",[ ]*");
        //place the specific info into variables    
            int pnum = Integer.parseInt(tempA[0]);
            String name = tempA[1];
            double price = Double.parseDouble(tempA[2]);
            String warN = tempA[3];
            int quant = Integer.parseInt(tempA[4]);
        //add the info into an object   
            partArray.add(new Part(pnum, name,price,warN,quant));                   
    }



    }

}

Класс, предназначенный длязаписываться как список массивов

public class ListArray <E extends Comparable>{

//Declare Variables 
    private E[] list;
    private int size;

//Construct Constructor 
    public ListArray(){
        list = (E[]) new Comparable[10];
    }

    public ListArray(int capacity){
        list = (E[]) new Comparable[capacity];
    }

/*This method will allow users to get the variable stored 
 * at the index they specify
 * @param: int index: the index of the wanted item
 * @return: E: the item at the speicifed index */
    public E get(int index){
        return list[index];
    }

/*This method will allow users to add an element to the 
 * end of the list array 
 * @param: E item: the item being added to the array */
    public void add(E item){
        list[size] = item;
        size++;
    }

/*This mehod will allow the user to find a specified item 
 * inside of the array 
 * @param: E target: the item the user wants to know the index of 
 * @return: int: the index of the item found */
    public int find(E target){

        for(int i = 0; i < size; i++){

            if(target.compareTo(list[i]) == 0){
                return i;
            }
        }
        return -1;
    }

/*This method will allow users to get the size of the array 
 * @return: int: the size of the array */
    public int size(){
        return size;
    }
}

и класс Part, который читает из файла csv.

public class Part <E extends Comparable>{

    //Declare Variables 
        private int pnum;
        private String name;
        private double price;
        private String warh;
        private int quant;

    //Construct Constructor 
        public Part(){
            pnum = 0;
            name = "";
            price = 0.0;
            warh = "";
            quant = 0;
        }

        public Part(int pnum, String name, double price, String warh, int quant){
            this.pnum = pnum;
            this.name = name;
            this.price = price;
            this.warh = warh;
            this.quant = quant;     
        }

    //Getters
        public int getPnum(){
            return pnum;
        }

        public String getName(){
            return name;
        }

        public double getPrice(){
            return price;
        }

        public String getWarh(){
            return warh;
        }

        public int getQuant(){
            return quant;
        }

    //Setters
        public void setPnum(int pnum){
            this.pnum = pnum;
        }

        public void setName(String name){
            this.name = name;
        }

        public void setPrice(double price){
            this.price = price;
        }

        public void setWarh(String warh){
            this.warh = warh;
        }

        public void setQuant(int quant){
            this.quant = quant;
        }

Когда я запускаю программу, я получаю эту ошибку внутриconsole

Исключение в потоке "main" java.lang.Error: Неразрешенные проблемы компиляции: несоответствие границ: тип Part не является допустимой заменой ограниченного параметра типа ListArray Несоответствие границ: типЧасть не является допустимой заменой ограниченного параметра типа ListArray в Prog2.main (Prog2.java:8)

На первый взгляд, это проблема того, как COmparable реализован водин из моих классов, и он не был правильно реализован в другом.Я пытался просматривать другие сообщения на сайте и пытался реализовать их безрезультатно.Спасибо вам большое!

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы указали, что ваш ListArray может быть параметризуем только для типов, которые расширяются Comparable

ListArray <E extends Comparable>

Но вы пытаетесь параметризовать его с Part, который не расширяет Comparable.

Похоже, вы сделали какую-то ошибку, сделав Part универсальным. Вы должны иметь Part орудие Comparable т.е.:

public class Part implements Comparable<Part>

И затем внедрить метод compareTo в Part

@Override
public int compareTo(Part other) {
    // ... code here
}
0 голосов
/ 16 сентября 2018

Ваша проблема здесь связана с тем, что вы объявили Part класс использования универсального E, расширяющего интерфейс Comparable.

То же самое относится к вашему классу ListArray, в котором вы снова определяете его как принимающий E, который расширяет интерфейс Comparable.

Когда вы попытаетесь создать новый ListArray, сделав так:

ListArray<Part> partArray = new ListArray<Part>(13);

он будет ожидать чего-то, что находится в пределах границ, в данном случае этобудучи чем-то, что реализует интерфейс Comparable.Поскольку ваш Part объект этого не делает, это причина, по которой вы получаете эту ошибку (также сообщение об компиляторе весьма информативно об этом).

Я бы, как правило, рекомендовал, чтобы вы хорошо читали дженерикипопытайтесь использовать их, поскольку кажется, что вам не хватает их понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...