Java-如何从ArrayList打印特定对象的方法?
基本上我有一个对象的数组列表。有不同类型的对象,例如三角形、矩形和球体。每个对象都有自己的方法,例如getArea、GetPermiture和getVolume。这些方法对于每个对象都是不同的。如何遍历ArrayList以打印出每个对象的所有方法Java-如何从ArrayList打印特定对象的方法?,java,arraylist,Java,Arraylist,基本上我有一个对象的数组列表。有不同类型的对象,例如三角形、矩形和球体。每个对象都有自己的方法,例如getArea、GetPermiture和getVolume。这些方法对于每个对象都是不同的。如何遍历ArrayList以打印出每个对象的所有方法 假设我从一个三角形开始。如何使用for循环和switch block/if语句打印其getArea和getPeriment方法?for(int I=0;I您可以使用简单的for循环在ArrayList上迭代,然后调用对象的toString()方法: f
假设我从一个三角形开始。如何使用for循环和switch block/if语句打印其getArea和getPeriment方法?
for(int I=0;I您可以使用简单的for循环在ArrayList
上迭代,然后调用对象的toString()
方法:
for(int i=0; i<listOfObjects.length; i++) {
Object obj = listOfObjects[i];
if (obj instanceof Triangle) {
Triangle t = (Triangle) obj;
t.getArea();
} else if (obj instanceof Rectangle) {
Rectangle r = (Rectangle) obj;
r.getPerimeter();
} else {
Sphere s = (Sphere) obj;
s.getSomeOtherThing();
}
}
for (int = 0; i < arrayList.size(); i++)
{
System.out.println(arrayList.get(i).toString());
}
选中此项。instanceof运算符的替代项
ArrayList arr=new ArrayList();
arr.add(new Traingle());
arr.add(new Rectangle());
arr.add(new Sphere());
for(Object obj:arr){
int value=0;
switch (obj.getClass().getSimpleName()){
case "Rectangle":
value=((Rectangle) obj).getPerimeter();
break;
case "Traingle":
value=((Traingle) obj).getArea();
break;
case "Sphere":
value=((Sphere) obj).getVolume();
break;
default:
break;
}
System.out.println("Object "+obj.getClass().getSimpleName()+":"+value);
}
为什么不使用接口呢
package com.spiderman;
public interface Shape {
public void getArea();
public void getPerimeter();
public void getVolume();
}
package com.spiderman;
public class Rectangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Rectangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Rectangle");
}
@Override
public void getVolume() {
System.out.println("volume of Rectangle");
}
}
package com.spiderman;
public class Triangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Triangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Triangle");
}
@Override
public void getVolume() {
System.out.println("volume of Triangle");
}
}
package com.prash;
public class Sphere implements Shape {
@Override
public void getArea() {
System.out.println("area of Sphere");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Sphere");
}
@Override
public void getVolume() {
System.out.println("volume of Sphere");
}
}
package com.spiderman;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Shape> list = new ArrayList<Shape>();
list.add(new Rectangle());
list.add(new Triangle());
list.add(new Sphere());
for (int i = 0; i < list.size(); i++) {
Shape shape = list.get(i);
shape.getArea();
shape.getPerimeter();
shape.getVolume();
System.out.println("------------------");
}
}
}
您可以重写“toString()”以返回这些方法输出的字符串版本。尽管这是可行的,但请注意,instanceof
应该是最后的选择,因为这将导致难以维护的代码。通常可以使用方法重写来生成所需的结果;请参阅@srakvin的toString()
suggestion。忘了提到必须在没有增强的for循环的情况下完成。三角形t=(三角形)obj;是什么意思?三角形t=(三角形)obj;意味着从对象对象到三角形对象的强制转换。如果不能使用增强的循环,只需将代码更改为正则for循环。我已经为您更改了:)如果您认为我的答案对您有帮助,请选择我的答案作为您问题的正确答案?只要在我答案旁边的牌子上打勾就行了。谢谢:)手动调用toString()
是多余的System.out.println()
将为您调用它。
package com.spiderman;
public interface Shape {
public void getArea();
public void getPerimeter();
public void getVolume();
}
package com.spiderman;
public class Rectangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Rectangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Rectangle");
}
@Override
public void getVolume() {
System.out.println("volume of Rectangle");
}
}
package com.spiderman;
public class Triangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Triangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Triangle");
}
@Override
public void getVolume() {
System.out.println("volume of Triangle");
}
}
package com.prash;
public class Sphere implements Shape {
@Override
public void getArea() {
System.out.println("area of Sphere");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Sphere");
}
@Override
public void getVolume() {
System.out.println("volume of Sphere");
}
}
package com.spiderman;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Shape> list = new ArrayList<Shape>();
list.add(new Rectangle());
list.add(new Triangle());
list.add(new Sphere());
for (int i = 0; i < list.size(); i++) {
Shape shape = list.get(i);
shape.getArea();
shape.getPerimeter();
shape.getVolume();
System.out.println("------------------");
}
}
}
area of Rectangle
perimiter of Rectangle
volume of Rectangle
area of Triangle
perimiter of Triangle
volume of Triangle
area of Sphere
perimiter of Sphere
volume of Sphere