2016-10-01 7 views
-2

Ich habe ein Customer-Objekt in meinem Projekt, das das Benutzerobjekt erweitert.Warum erhalte ich diesen Cast-Fehler?

User.java

public class User { 

private int userId; 
private int user_type; 
private String username; 
private String password; 

public User(int id, int user_type, String username, String password) { 
    super(); 
    this.userId = id; 
    this.user_type = user_type; 
    this.username = username; 
    this.password = password; 
} 

public int getUserId() { 
    return userId; 
} 
public void setUserId(int userId) { 
    this.userId = userId; 
} 

public int getUser_type() { 
    return user_type; 
} 

public void setUser_type(int user_type) { 
    this.user_type = user_type; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

} 

und meine Customer.java

public class Customer extends User{ 

private String cartId; 

public Customer(int id, int user_type, String username, String password) { 
    super(id, user_type, username, password); 
    // TODO Auto-generated constructor stub 
} 

public String getCartId() { 
    return cartId; 
} 

public void setCartId(String cartId) { 
    this.cartId = cartId; 
} 
} 

Nun habe ich eine einfache Login für meine Website, dass erste Kontrollen eines Benutzers vorhanden ist, und wenn ja, es prüft wenn es ein Kunde oder von der Verwaltung ist. Wenn es ein Kunde ist, habe ich eine Methode, die seine Einkaufswagen-ID abruft. Dann gieße ich den Benutzer auf Kundentyp und setze dann die Warenkorb-ID über Setter.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    boolean userDoesNotExist = false; 

    User user = ServiceFactory.userService().getUser(username); 
    System.out.println(user.getPassword() + " " + user.getUsername()); 

    if(user != null){ 
     if(user.getUser_type() == 1){ 
      String cartId = ServiceFactory.customerService().getCartId(user.getUserId()); 
      Customer customer = (Customer) user; 
      customer.setCartId(cartId); 

      request.getSession().setAttribute("customer", customer); 
      response.sendRedirect("customer"); 
     }else{ 

     } 
    }else{ 
     userDoesNotExist = true; 

     request.setAttribute("userDoesNotExist", userDoesNotExist); 
     request.setAttribute("username", username); 
     RequestDispatcherManager.dispatch(this, "/login.jsp", request, response); 
    } 
} 

Also, auf meine Frage zurück, warum bin ich immer ...

java.lang.ClassCastException: com.qbryx.domain.User cannot be cast to com.qbryx.domain.Customer 
com.qbryx.servlets.LoginServlet.doPost(LoginServlet.java:50) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Antwort

1

Das ist richtig - es ist Kunden, die den Benutzer erstreckt, nicht umgekehrt. Es ist immer in Ordnung, einen Kunden an den Benutzer zu übergeben, aber die Übertragung eines Benutzers an den Kunden ist nur erfolgreich, wenn das Objekt tatsächlich ein Kunde ist.

Wenn Sie "erweitert" von Java nach Englisch übersetzen, erhalten Sie, dass jeder Kunde ein Benutzer ist, aber nicht jeder Benutzer ein Kunde ist.

1

java.lang.ClassCastException:

Diese Ausnahme tritt auf, wenn Gießen (einziehe und Upcasting) tritt in verschiedener Hierarchie.

Hier können Sie versuchen, das User Object (Parent-Klasse) in das Kundenobjekt (Child-Klasse)

Customer customer = (Customer) user;// this is wrong since user is not a customer 

Um zu vermeiden, ClassCastException Sie können Benutzer instanceof Operator Check

if(user instanceof Customer){ 
    customer = (Customer) user; 
} 
zu werfen
Verwandte Themen