2014-11-07 3 views
0

Я получаю сообщение об ошибке и не знаю, почему,Java WS отливать ошибку

это мой проект установки:

enter image description here

Всякий раз, когда я запускаю метод сервера, который ссылается Book.java, я получить это сообщение об ошибке

java.lang.ClassCastException: com.client.Book cannot be cast to com.server.Book 

Могу ли я иметь такой же класс как на клиенте, так и на сервере?

Это код для моего Book класса

* Единственное отличие состоит в пакете декларации

package com.client; /* on client side*/ 
package com.server; /* on server side */ 

import java.io.Serializable; 

public class Book implements Serializable 
{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private String name, author; 
private int copiesAvail; 
private int daysToReturn; 
public Book() 
{ 

} 

public Book (String name, String author) 
{ 
    this.name = name; 
    this.author = author; 
    copiesAvail = 1; 
    daysToReturn = 0; 
} 

// getters 
public String getName() {return name;} 
public String getAuthor() {return author;} 
public int getCopiesAvail() {return copiesAvail;} 
public int getDaysToReturn() {return daysToReturn;} 

// setters 
public void setName(String name) {this.name = name;} 
public void setAuthor(String author) {this.author= author;} 
public void setCopiesAvail(int copiesAvail) {this.copiesAvail = copiesAvail;} 
public void setDaysToReturn(int daysToReturn) {this.daysToReturn = daysToReturn;} 

public String toString() 
{ 
    return "Name: " + getName() 
      + "\nAuthor: " + getAuthor() 
      + "\nNumber of Copies Available: " + getCopiesAvail(); 
} 

} 

Что может быть причиной этой ошибки?

ответ

1

Эти два класса, хотя они имеют одно и то же имя, являются двумя совершенно разными, несовместимыми классами. В книге в пакете клиента и на сервере нет отношения Is-A, поэтому бросок наверняка потерпит неудачу.

Вам не обязательно иметь два класса с точно такой же реализацией. Если этот класс используется как клиентом, так и сервером, стандартный способ состоит в том, чтобы поместить этот класс в другой пакет, например «общий», и делиться между кодом клиента и сервера.

1

Вы можете иметь и (Book.java на клиентском пакете, и на серверном пакете). Но почему вы это сделали? Они выполняют ту же работу, поэтому нет необходимости иметь два класса.

Удалите один класс и используйте другой с обеих сторон. Это также решит вашу проблему. И переместите класс в нейтральный пакет, потому что он используется на обоих сторонах сервера клиентом.

Надеюсь, это поможет.

+0

Я сделал это, положил 'Book.java' в'/com' и изменил ссылки 'import' как на клиенте, так и на сервере. Теперь я получаю «ClassNotFoundException: com.client.Book» Кажется, он все еще ищет его в '/ com/client' – jsan

+0

Вы снова строили проекты? Очистите все проекты и скомпилируйте их и создайте их еще раз. – Vall0n

Смежные вопросы