对对象数组使用泛型的绑定不匹配错误

Bound mismatch error using Generics for an object array

我以前使用过可比较的接口,但是将它与通用对象和第二个对象一起使用给我带来了一些困难

这是我的驱动程序

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



    }

}

class 意味着像数组列表一样编写

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;
    }
}

和从 csv 文件中读入的部分 class。

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;
        }

当我 运行 程序时,我在控制台中收到此错误

线程异常"main"java.lang.Error:未解决的编译问题: 绑定不匹配:类型 Part 不是类型 ListArray 的绑定参数的有效替代 绑定不匹配:类型 Part 不是类型 ListArray 的绑定参数的有效替代 在 Prog2.main(Prog2.java:8)

从表面上看,这是我的一个 classes 中如何实现 COmparable 而在另一个中没有正确实现的问题。我尝试查看网站上的其他帖子并尝试实施它们无济于事。太感谢了!

您的问题源于您声明了 Part class 使用扩展 Comparable 接口的通用 E

同样适用于您的 ListArray class,您在其中再次将其定义为接受扩展 Comparable 接口的 E

当您尝试创建一个新的 ListArray 时:

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

它会有效地期望范围内的东西,在这种情况下,这是实现 Comparable 接口的东西。由于您的 Part 对象没有这样做,这就是您收到此错误的原因(编译器消息也对此提供了很多信息)。

如果您尝试使用泛型,我通常会建议您好好阅读它们,因为您似乎缺乏对它们的理解。

您已指定 ListArray 只能对扩展 Comparable

的类型进行参数化
ListArray <E extends Comparable>

但是,您正在尝试使用 Part 对其进行参数化,这不会扩展 Comparable.

看来您在使 Part 通用化时犯了一些错误。您应该 Part 实施 Comparable 即:

public class Part implements Comparable<Part>

然后在Part

中实现compareTo方法
@Override
public int compareTo(Part other) {
    // ... code here
}