【问题标题】:Java - Loop through instances of a class rather than calling a method for each separate instanceJava - 循环遍历类的实例,而不是为每个单独的实例调用方法
【发布时间】:2016-08-23 21:31:45
【问题描述】:

我开始学习 Java,想知道如何在调用方法时循环遍历类的实例,而不是为每个实例单独调用方法,如下所示:

String potentialFlight = (Flight1.getLocations(response));
if (potentialFlight != null) {
    System.out.println(potentialFlight);
}

potentialFlight = (Flight2.getLocations(response));
if (potentialFlight != null) {
    System.out.println(potentialFlight);
}

为了清楚起见,Flight1Flight2 是类 Flight 的实例。响应是解析到方法中的用户输入,将是一个位置,我将使用 getLocations 方法返回从该位置出发的任何潜在航班。

如果您需要我的更多代码,请在下方评论。

感谢您的帮助!

【问题讨论】:

  • 当你开始编写 Thing1Thing2 之类的类或方法时,某些地方通常会出错。你为什么还要开这样的课?
  • 如果Flight1Flight2是一个类的实例,它们应该被命名为flight1flight2。将它们放在一个列表或数组中,然后遍历该列表或数组。
  • @Tunaki 他/她说它们是同一类的实例,我希望只是他/她不遵守变量命名约定。无论如何,您应该将它们存储在某种集合中,无论是数组还是类似的东西。然后你可以遍历实例并执行方法调用。
  • 是的,很抱歉刚接触编码并且没有意识到正确的命名约定是小写的!感谢您的帮助。

标签: java class loops oop methods


【解决方案1】:

您可以将所有实例放入一个 Array(List) 中,并使用 foreach 构造遍历所有实例。

例如:

Flight[] flights = { Flight1, Flight2 };
for (Flight f : flights) {
    String potentialFlight = (f.getLocations(response));
    if (potentialFlight != null) {
        System.out.println(potentialFlight);
    }
}

【讨论】:

    【解决方案2】:

    您可能应该使用接口进行灵活处理,例如:

    public interface IFlyingObject {
    
        Object getLocations(Object o);
    
    }
    
    public class Plane implements IFlyingObject{
        @Override
        public Object getLocations(Object o) {
            return null;
        }
    }
    public class Helicopter implements IFlyingObject{
        @Override
        public Object getLocations(Object o) {
            return null;
        }
    }
    public static void main(String[] args) {
        List<IFlyingObject> flightObjects = new ArrayList<IFlyingObject>();
        flightObjects.add(new Plane());
        flightObjects.add(new Helicopter());
        Object response = new Object();
        for (IFlyingObject f : flightObjects) {
            Object result = f.getLocations(response);
        }
    }
    

    【讨论】:

      【解决方案3】:

      解决方案:

      Stream.of(flights)
              .map(f -> f.getLocations(response))
              .filter(f -> f != null)
              .forEach(System.out::println);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        相关资源
        最近更新 更多