对对象数组使用泛型的绑定不匹配错误
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
}
我以前使用过可比较的接口,但是将它与通用对象和第二个对象一起使用给我带来了一些困难
这是我的驱动程序
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
}