您好我对Java非常陌生,在这段代码中,我认为我没有在主要内容中正确创建Bag?请帮助谢谢!
线程中的异常" main" java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.Comparable; 中午。(Bag.java:12) 在mid.Bag.main(Bag.java:91)
public class Bag<T extends Comparable<T>> implements Iterable<T> {
private int MAX_ITEMS = 10; // initial array size
private int size;
private T[] data;
public Bag( ) {
data = (T []) new Object[MAX_ITEMS];
size = 0;
}
public void add(T newItem) {
// check if it's full, then extend (array resizing)
if (size == data.length) {
T[ ] temp = (T [ ] ) new Object[data.length*2];
for (int i = 0; i < size; ++i)
temp[i] = data[i];
// reassign data to point to temp
data = temp;
}
// then do the assignment
data[size++] = newItem; // assign newItem in the next-available slot
}
public Iterator<T> iterator() {
return new BagIterator();
}
/***************************
* nested class BagIterator
***************************/
class BagIterator implements Iterator<T> {
// instance member
private int index;
// (0) constructor
public BagIterator() {
index = 0;
}
// (1)
public boolean hasNext() {
return (index < size); // size in the outer Bag<E>
}
// (2)
public T next() {
/*
T temp = data[index]; // save the element value
index++; // increment index
return temp;
*/
return data[index++];
}
public static void main(String[ ] args) {
Bag<String> bag1=new Bag<String>();
bag1.add("good");
bag1.add("fortune");
bag1.add("billionarie");
for (String x: bag1)
System.out.println(x);
}
答案 0 :(得分:7)
是的,您正在创建long double
,然后尝试将其强制转换为html .formRowSubmit input[type="submit"] {
/*width: 26%;*/
display: inline-block;
margin: 5px 0% 5px ;
margin-bottom: 10px;
height: 25px;
border-radius: 3px;
outline: 0;
-moz-outline-style: none;
background: #CAD722;
border: none;
color: white;
font-size: 10px;
font-weight: 150;
cursor: pointer;
transition: box-shadow .4s ease;
}
,编译器将其转换为强制转换为Object[]
(使用原始T[]
1}} type)由于你对T的约束。
阵列和泛型基本上不能很好地协同工作。
将Comparable[]
字段设为Comparable
并在必要时投放单个值可能会更简单。
答案 1 :(得分:2)
下面:
data = (T []) new Object[MAX_ITEMS];
您正构建一个Object
数组并尝试将其强制转换为T[]
。但是你已声明T
继承自Comparable
。所以使用:
data = (T []) new Comparable[MAX_ITEMS];
答案 2 :(得分:0)
您也可以重写构造函数:
public Bag(Class<T> c, int s) {
// Use Array native method to create array of a type only known at run time
@SuppressWarnings("unchecked")
final T[] dataArray = (T[]) Array.newInstance(c, s);
this.data = dataArray;
}
然后你就可以使用它:
Bag<String> bag1 = new Bag<>(String.class,10);
这也应该有效,IMO。在任何情况下,T的实例都必须具有可比性。