如何使用两种不同模型的两种方法?

How can use two method from two different models?

我的项目遇到了棘手的问题。很难解释。我有两个不同的模型,但是,我应该比较这两个模型。我应该为这两个模型制作一个新模型吗?

这里是Cart.java。有 Voyage.java 作为 Model。这 class 区分 if type_voyage 而不是 equals 彼此。我有另一个名为 Bus.java 的模型。我应该比较它是否等于模型。

Cart.java

 boolean cartContainsDifferentTypeVoyage(final String type_voyage) {
    ArrayList<Voyage> list = Lists.newArrayList(Collections2.filter(voyages, new Predicate<Voyage>() {
        @Override
        public boolean apply(Voyage voyage) {
            return !voyage.getType_voyage().equals(type_voyage);
        }
    }));
    return list.size() > 0 ? true : false;
}

Bus.java

 public class Bus {
    private static Bus instance;
    private String BROADCAST_TAG = "com.bss.hepsi.bus";


    public int hotel_counter = 5;
    public int car_counter = 5;

    private String logo_link;
    private String voyage_code;
    private String from_port;
    private String from_port_label;
    private String from_city;
    private String to_port;
    private String to_port_label;
    private String to_city;
    private String company_name;
    private boolean has_transfer;
    private String telephone_number;
    Calendar departureTime = Calendar.getInstance();
    private Calendar arrivalTime = Calendar.getInstance();
    long departure_time;
    long arrival_time;
    float price;

    ArrayList<Leg> legs = new ArrayList<>();

    public ArrayList<BusPassenger> busPasengers = new ArrayList<>();

    int direction = MyConstants.DIRECTION_GOING;

    private String type_bus;

    private boolean has_return;
    private Calendar selected_date;
    private String goingDate;
    private String returnDate;
    private Context context;
    public boolean in_Cart = false;
    public String type;
    private String passengerNumber;

    boolean isExpanded;
    boolean isShowProgress;


    public Bus() {
    }

    public static synchronized Bus getInstance() {
        if (instance == null) {
            instance = new Bus();
        }
        instance.setPassengerNumber(ResultActivity.passengerNumber);
        instance.setFrom_city(ResultActivity.fromCity);
        instance.setTo_city(ResultActivity.toCity);
        instance.setGoingDate(ResultActivity.strGoingDate);
        instance.setReturnDate(ResultActivity.strReturnDate);
        instance.setHas_return(ResultActivity.hasReturn);
        return instance;
    }

    public String getPassengerNumber() {
        return passengerNumber;
    }

    public void setPassengerNumber(String passengerNumber) {
        this.passengerNumber = passengerNumber;

    }
    public boolean isExpanded() {
        return this.isExpanded;
    }

    public void setExpanded(boolean expanded) {
        this.isExpanded = expanded;
    }

    public boolean isShowProgress() {
        return this.isShowProgress;
    }

    public void setShowProgress(boolean showProgress) {
        this.isShowProgress = showProgress;
    }

    public static synchronized void clearInstance() {
        instance = null;
    }

    public String getCompany_name() {
        return company_name;
    }

    public void setCompany_name(String company_name) {
        this.company_name = company_name;
    }

    public String getFrom_port() {
        return from_port;
    }

    public void setFrom_port(String from_port) {
        this.from_port = from_port;
    }

    public String getTo_port() {
        return to_port;
    }

    public void setTo_port(String to_port) {
        this.to_port = to_port;
    }


    public Calendar getSelected_date() {
        return selected_date;
    }

    public void setSelected_date(Calendar selected_date) {
        this.selected_date = selected_date;
    }

    public String getFrom_city() {
        return from_city;
    }

    public void setFrom_city(String from_city) {
        this.from_city = from_city;
    }

    public String getTo_city() {
        return to_city;
    }

    public void setTo_city(String to_city) {
        this.to_city = to_city;
    }

    public String getLogo_link() {
        return logo_link;
    }

    public void setLogo_link(String logo_link) {
        this.logo_link = logo_link;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getTelephone_number() {
        return telephone_number;
    }

    public void setTelephone_number(String telephone_number) {
        this.telephone_number = telephone_number;
    }

    public String getVoyage_code() {
        return voyage_code;
    }

    public void setVoyage_code(String voyage_code) {
        this.voyage_code = voyage_code;
    }

    public String getFrom_port_label() {
        return from_port_label;
    }

    public void setFrom_port_label(String from_port_label) {
        this.from_port_label = from_port_label;
    }

    public String getTo_port_label() {
        return to_port_label;
    }

    public void setTo_port_label(String to_port_label) {
        this.to_port_label = to_port_label;
    }

    public Boolean getHas_transfer() {
        return has_transfer;
    }

    public void setHas_transfer(Boolean has_transfer) {
        this.has_transfer = has_transfer;
    }

    public Calendar getDepartureTime() {
        return departureTime;
    }

    public void setDepartureTime(long departure_time_in_milliseconds) {
        this.departureTime.setTimeInMillis(departure_time_in_milliseconds);
    }

    public Calendar getArrivalTime() {
        return arrivalTime;
    }

    public void setArrivalTime(long return_time_in_milliseconds) {

        this.arrivalTime.setTimeInMillis(return_time_in_milliseconds);
    }

    public int getDirection() {
        return direction;
    }

    public void setDirection(int direction) {
        this.direction = direction;
    }

    public String getGoingDate() {
        return goingDate;
    }

    public void setGoingDate(String goingDate) {
        this.goingDate = goingDate;
    }

    public String getReturnDate() {
        return returnDate;
    }

    public void setReturnDate(String returnDate) {
        this.returnDate = returnDate;
    }

    public boolean getHas_return() {
        return has_return;
    }

    public void setHas_return(boolean has_return) {
        this.has_return = has_return;
    }

    public ArrayList<Leg> getLegs() {
        return legs;
    }

    public void setLegs(ArrayList<Leg> legs) {
        this.legs = legs;
    }

    public long getDeparture_time() {
        return departure_time;
    }

    public void setDeparture_time(long departure_time) {
        this.departure_time = departure_time;
    }

    public long getArrival_time() {
        return arrival_time;
    }

    public void setArrival_time(long arrival_time) {
        this.arrival_time = arrival_time;
    }

    public String getType_bus() {
        return type_bus;
    }

    public void setType_voyage(String type_bus) {
        this.type_bus = type_bus;
    }

    private void sendRequest(final String owner, final Map<String, String> header)  {


        StringRequest stringRequest = new StringRequest(Request.Method.POST, MyConstants.URL + owner,
                new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {

                    JSONObject object = new JSONObject(response);
                    if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_NOTAVAILABLE)) {
                        sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_NOTAVAILABLE);
                    } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_SUCCESS)) {
                        JSONArray result = object.getJSONArray(MyConstants.SERVICE_RESULT);
                        if (result.length()>0) {
                            JSONArray resultGoing = result.getJSONObject(0).getJSONArray("going");
                            sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_GOING, resultGoing);
                        }
                        if (has_return) {
                            if (result.length() > 1) {
                                JSONArray resultReturn = result.getJSONObject(1).getJSONArray("round");
                               if (resultReturn.length()<1){
                                   busReturnIsEmpty();}
                                else{
                                   busReturnIsNotEmpty();
                               }
                                sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_RETURN, resultReturn);

                            }
                        }
                    } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_FAILURE)) {
                        sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_SERVER);
                    }
                } catch (JSONException e) {

                }
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                sendVoyagesErrorBroadcast(owner, getErrorType(error));
            }
        }) {
            @Override
            public Map<String, String> getHeaders() {
                return header;
            }

        };

        stringRequest.setRetryPolicy(new DefaultRetryPolicy(600 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        MySingleton.getInstance(context).addToRequestQueue(stringRequest);

    }
    private void sendVoyagesArrayBroadcast(String target, JSONArray resultArray) {
        Intent intent = new Intent();
        intent.setAction(BROADCAST_TAG + target);
        intent.putExtra("data", resultArray.toString());
        context.sendBroadcast(intent);
    }


    public static Bus setJsonToClass(JSONObject jsonObject, int direction, String owner) {
        Bus bus = new Gson().fromJson(String.valueOf(jsonObject), Bus.class);
        bus.setDirection(direction);
        bus.setType_voyage(owner);
        bus.setDepartureTime(bus.departure_time);
        bus.setArrivalTime(bus.arrival_time);
        for (Leg leg :
               bus.legs) {

            leg.setDepartureTime(leg.departure_time);
            leg.setArrivalTime(leg.arrival_time);

        }
        bus.type = owner;
        return bus;

    }

Voyage.java

  public class Voyage {
private static Voyage instance;

//private static String url="http://78.186.57.167:3000/";
//private static String url="http://10.0.0.27:1337/";
/////public static final String BROADCAST_TAG = "com.bss.hepsi.voyage"; ///bunu kaldırdım static oldugu için
private String BROADCAST_TAG = "com.bss.hepsi.voyage";  ///onun yerine bunu koydum
//private static String url="http://185.122.203.104:3002/";
// private static String url="http://10.0.0.25:1337/";
public int checkCart; // Result activity'de veri gelip gelmediğini kontrol edip kullanıcıyı uyarmak için
public int hotel_counter = 5;
public int car_counter = 5;

private String logo_link;
private String voyage_code;
private String from_port;
private String from_port_label;
private String from_city;
private String to_port;
private String to_port_label;
private String to_city;
private String company_name;
private boolean has_transfer;
private String telephone_number;
Calendar departureTime = Calendar.getInstance();
private Calendar arrivalTime = Calendar.getInstance();
long departure_time;
long arrival_time;
float price;

ArrayList<Leg> legs = new ArrayList<>();

public ArrayList<FlightPassenger> flightPassengers = new ArrayList<>();

int direction = MyConstants.DIRECTION_GOING;

private String type_voyage;

private boolean has_return;
private Calendar selected_date;
private String goingDate;
private String returnDate;
private Context context;
public boolean in_Cart = false;
public String type;
private String passengerNumber;


public Voyage() {
}

public static synchronized Voyage getInstance() {
    if (instance == null) {
        instance = new Voyage();
    }
    instance.setPassengerNumber(ResultActivity.passengerNumber);
    instance.setFrom_city(ResultActivity.fromCity);
    instance.setTo_city(ResultActivity.toCity);
    instance.setGoingDate(ResultActivity.strGoingDate);
    instance.setReturnDate(ResultActivity.strReturnDate);
    instance.setHas_return(ResultActivity.hasReturn);
    return instance;
}

public String getPassengerNumber() {
    return passengerNumber;
}

public void setPassengerNumber(String passengerNumber) {
    this.passengerNumber = passengerNumber;

}

public static synchronized void clearInstance() {
    instance = null;
}

public String getCompany_name() {
    return company_name;
}

public void setCompany_name(String company_name) {
    this.company_name = company_name;
}

public String getFrom_port() {
    return from_port;
}

public void setFrom_port(String from_port) {
    this.from_port = from_port;
}

public String getTo_port() {
    return to_port;
}

public void setTo_port(String to_port) {
    this.to_port = to_port;
}

/*public static String getUrl() {
 return url;
 }*/

public Calendar getSelected_date() {
    return selected_date;
}

public void setSelected_date(Calendar selected_date) {
    this.selected_date = selected_date;
}

public String getFrom_city() {
    return from_city;
}

public void setFrom_city(String from_city) {
    this.from_city = from_city;
}

public String getTo_city() {
    return to_city;
}

public void setTo_city(String to_city) {
    this.to_city = to_city;
}

public String getLogo_link() {
    return logo_link;
}

public void setLogo_link(String logo_link) {
    this.logo_link = logo_link;
}

public float getPrice() {
    return price;
}

public void setPrice(float price) {
    this.price = price;
}

public String getTelephone_number() {
    return telephone_number;
}

public void setTelephone_number(String telephone_number) {
    this.telephone_number = telephone_number;
}

public String getVoyage_code() {
    return voyage_code;
}

public void setVoyage_code(String voyage_code) {
    this.voyage_code = voyage_code;
}

public String getFrom_port_label() {
    return from_port_label;
}

public void setFrom_port_label(String from_port_label) {
    this.from_port_label = from_port_label;
}

public String getTo_port_label() {
    return to_port_label;
}

public void setTo_port_label(String to_port_label) {
    this.to_port_label = to_port_label;
}

public Boolean getHas_transfer() {
    return has_transfer;
}

public void setHas_transfer(Boolean has_transfer) {
    this.has_transfer = has_transfer;
}

public Calendar getDepartureTime() {
    return departureTime;
}

public void setDepartureTime(long departure_time_in_milliseconds) {
    this.departureTime.setTimeInMillis(departure_time_in_milliseconds);
}

public Calendar getArrivalTime() {
    return arrivalTime;
}

public void setArrivalTime(long return_time_in_milliseconds) {

    this.arrivalTime.setTimeInMillis(return_time_in_milliseconds);
}

public int getDirection() {
    return direction;
}

public void setDirection(int direction) {
    this.direction = direction;
}

public String getGoingDate() {
    return goingDate;
}

public void setGoingDate(String goingDate) {
    this.goingDate = goingDate;
}

public String getReturnDate() {
    return returnDate;
}

public void setReturnDate(String returnDate) {
    this.returnDate = returnDate;
}

public boolean getHas_return() {
    return has_return;
}

public void setHas_return(boolean has_return) {
    this.has_return = has_return;
}

public ArrayList<Leg> getLegs() {
    return legs;
}

public void setLegs(ArrayList<Leg> legs) {
    this.legs = legs;
}

public long getDeparture_time() {
    return departure_time;
}

public void setDeparture_time(long departure_time) {
    this.departure_time = departure_time;
}

public long getArrival_time() {
    return arrival_time;
}

public void setArrival_time(long arrival_time) {
    this.arrival_time = arrival_time;
}

public String getType_voyage() {
    return type_voyage;
}

public void setType_voyage(String type_voyage) {
    this.type_voyage = type_voyage;
}
public void searchFlightVoyages(Context context) {
    this.context = context;
    cancelRequest("flight/search", context);
    Map<String, String> header = prepareVoyageSearchHeaderForFlight();
    sendRequest("flight/search", header);
}

public void searchTrainVoyages(Context context) {
    this.context = context;
    cancelRequest("train/search", context);
    Map<String, String> header = prepareVoyageSearchHeader();
    sendRequest("train/search", header);
}

public void searchBoatVoyages(Context context) {
    this.context = context;
    cancelRequest("seaway/boat/search", context);
    Map<String, String> header = prepareVoyageSearchHeader();
    sendRequest("seaway/boat/search", header);
}

public void searchFerryVoyages(Context context) {
    this.context = context;
    cancelRequest("seaway/ferry/search", context);
    Map<String, String> header = prepareVoyageSearchHeader();
    sendRequest("seaway/ferry/search", header);
}
private void sendRequest(final String owner, final Map<String, String> header) {
    StringRequest stringRequest = new StringRequest(Request.Method.POST, MyConstants.URL + owner,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                       Log.e("AAAA" + owner, response);
                    try {

                        JSONObject object = new JSONObject(response);
                        if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_NOTAVAILABLE)) {
                            // servisten gelen cevap not_available ise
                            //// owner
                            sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_NOTAVAILABLE);
                        } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_SUCCESS)) {
                            // servisten gösterilebilecek bir sonuç geldiyse
                            JSONArray result = object.getJSONArray(MyConstants.SERVICE_RESULT);
                            if (result.length()>0) {
                                //     checkCart=0;
                                //    sendCheckCart();
                                JSONArray resultGoing = result.getJSONObject(0).getJSONArray("going");
                                sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_GOING, resultGoing);
                            }
                            if (has_return) {
                                if (result.length() > 1) {
                                    JSONArray resultReturn = result.getJSONObject(1).getJSONArray("round");
                                           sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_RETURN, resultReturn);
                                }
                            }
                        } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_FAILURE)) {
                            sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_SERVER);
                        }
                    } catch (JSONException e) {
                        Log.e("search" + owner + "VoyagesErr1", e.toString());
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Log.e("AAAA" + owner, String.valueOf(error.getCause()));
            sendVoyagesErrorBroadcast(owner, getErrorType(error));
        }
    }) {
        @Override
        public Map<String, String> getHeaders() {
            return header;
        }
    };
    stringRequest.setTag(owner);
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(60 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    MySingleton.getInstance(context).addToRequestQueue(stringRequest);

}
public static Voyage setJsonToClass(JSONObject jsonObject, int direction, String owner) {
    //Log.e("jsonobj", String.valueOf(jsonObject));
    Voyage voyage = new Gson().fromJson(String.valueOf(jsonObject), Voyage.class);
    voyage.setDirection(direction);
    voyage.setType_voyage(owner);
    voyage.setDepartureTime(voyage.departure_time);
    voyage.setArrivalTime(voyage.arrival_time);
    for (Leg leg :
            voyage.legs) {

        leg.setDepartureTime(leg.departure_time);
        leg.setArrivalTime(leg.arrival_time);

    }
    voyage.type = owner;
    return voyage;

}

当您从问题中删除所有多余的代码时,问题会更加明显。

首先我简化了你的比较方法:

Cart.java

 boolean cartContainsDifferentTypeVoyage(final String type_voyage) {
    for(Voyage voyage : voyages) {
         if(!type_voyage.equals(voyage.getType_voyage()) {
              return true;
         }
    }
}

然后创建了一个接口

 interface Voyage {
      String getType_voyage();
 }

Bus.java

 public class Bus implements Voyage {
     ...
     private String type_voyage;

     @Override
     public String getType_voyage() {
       return type_voyage;
     }

      ...

}

并将Voyage.java更改为Ferry.java

public class Ferry implements Voyage {
  ...

  private String type_voyage;

  ...

  @Override
  public String getType_voyage() {
      return type_voyage;
  }

  ...

}

您可能想再创建一些 类,这样您的 'model' 类 就不会做太多事情/承担太多责任。