我正在尝试在main方法中打印List中的元素。但是我有一个问题,因为Eclipse说我在超类中实现的方法没有为我的类型定义。 有超类,还有其他三个扩展这个,我导入了java.util.List和java.util.ArrayList; 我需要实现方法的原因是因为我的导师问过,但是我知道在主方法中使用for循环就足够了。 超类:
import java.util.ArrayList;
import java.util.List;
public class Figura {
private int x;
private int y;
private String name;
private int index;
public Figura (String name, int x, int y) {
this.name = name;
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(Figura p) {
System.out.println(p.toString());
}
public void showElements (List <Figura> m) {
Figura p = m.get(index);
for (int i = 0; i < m.size(); i++){
System.out.println(m.get(i));
}
}
}
我不会在这里展示我创建的所有其他类(类是简单的数字,它们扩展了所有超类)。但主要问题在于:
import java.util.ArrayList;
import java.util.List;
public class zadanie2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List <Figura> kolekcje = new ArrayList<Figura>(10);
Punkt pr1 = new Punkt("Prostokat", 10,148,"Ciemne");
kolekcje.add(0,new Prostokat(pr1,42));
Punkt kolo1 = new Punkt("Kolo", 41,23,"Malinowe");
kolekcje.add(1,new Kolo(kolo1, 126));
Punkt pu31 = new Punkt("Punkt 3D", 45, 23,"Pomaranczowe");
kolekcje.add(2, new punkt3D(pu31, 451));
Punkt kw1 = new Punkt("Kwadrat", 215, 521,"Szary");
kolekcje.add(3, new Kwadrat(kw1, 620));
Punkt wk1 = new Punkt("Wektor", 52, 13,"Brazowy");
kolekcje.add(4, new Wektor(wk1, 41,52));
Punkt ec1 = new Punkt("Eklipsa", 52, 301, "Kremowy");
kolekcje.add(5, new Eclipsa(ec1, 22));
Punkt pr2 = new Punkt("Prostokat", 63,40,"Bialy");
kolekcje.add(6, new Prostokat(pr2,310));
Punkt kolo2 = new Punkt("Kolko",52,314,"Rozowe");
kolekcje.add(7, new Kolo(kolo2, 52));
Punkt pu32 = new Punkt("Punkcik 3D", 52,63,"Ciemno-brazowe");
kolekcje.add(8, new punkt3D(pu32, 412));
Punkt kw2 = new Punkt("Kwadracik", 52, 631,"Oliwkowy");
kolekcje.add(9, new Kwadrat(kw2,541));
Punkt wk2 = new Punkt("Wektor", 12, 71, "Czarne");
kolekcje.add(10, new Wektor(wk2, 41, 23));
int size = kolekcje.size();
//for (int i = 0; i< kolekcje.size(); i++) {
// System.out.println(kolekcje.get(i));
//}
kolekcje.showElements(kolekcje);
}
评论的内容(for循环),工作正常,但showElements(List <Figura> m)
方法不起作用,Eclipse显示此方法未定义为List<Figura>
类型。
此外,它建议像这样投射方法
((Figura) kolekcje).showElements(kolekcje);
但它也不起作用并在线程“main”中显示错误异常java.lang.ClassCastException:java.util.ArrayList无法强制转换为zadownedomoweZadanie1.Figura
请帮忙!
答案 0 :(得分:1)
kolekcje是对ArrayList
的引用。方法showElements
是Figura
对象上的方法。
您正在尝试访问showElements
上的ArrayList
,该Figura
不可用。
您可以在kolekcje[0].showElements(kolekcje);
个实例上访问它,例如:
Figura.showElements(kolekcje);
此外,根据showElements正在做的事情,您可能需要考虑将其设置为静态并访问它:
``Unicode Error exception 'Illuminate\Database\QueryException' with
message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of
collations (latin1_swedish_ci,IMPLICIT) and
(utf8_unicode_ci,COERCIBLE) for operation '=' (SQL: select `id` from
`pool` where `first_name` in (Nathalia) and `last_name` = Rodr``
答案 1 :(得分:1)
为了能够调用showElements
方法,您需要在Figura
对象上调用它。所以
kolekcje.showElements(kolekcje);
无效,因为 kolekcje 是List
,而不是Figura
。
由于您要显示Figura
s的列表,&amp;不只是一个;您最好使showElements
方法静态。你可以这样称呼它:
Figura.showElements(arrayOfFiguras);
<强> Figura.showElements()强>
// Display all the items of a Figura List
public static void showElements (List <Figura> m) {
for (int i = 0; i < m.size(); i++){
System.out.println(m.get(i));
}
}
答案 2 :(得分:0)
您正在调用ArrayList上的showElements()
方法,而不是Figura对象。这个问题有两个解决方案,我认为更好的方法是使方法保持静态。如下:
public static void showElements (List <Figura> m) {
Figura p = m.get(index);
for (int i = 0; i < m.size(); i++){
System.out.println(m.get(i));
}
最后,从:
更改方法调用kolekcje.showElements(kolekcje);
为:
Figura.showElements(kolekcje);
使方法静态非常重要,因为showElements()
方法与您调用它的Figura对象的实例完全无关。但是,它完全取决于您传递的列表。
您可以阅读有关使用静态方法here的原因的更多信息。