Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.
Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).
Пример
var name = p?.Spouse?.FirstName;
эквивалентен:
if (p != null)
{
if (p.Spouse != null)
{
name = p.Spouse.FirstName;
}
}
В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.
В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.
Для получения дополнительной информации: Операторы с нулевым условием
Имя пакета и имя класса должны быть одинаковыми с обеих сторон. То есть пишите один раз, скомпилируйте один раз, а затем передайте обеим сторонам ту же копию. У вас нет отдельных классов server.Message
и client.Message
, но один shared.Message
класс или что-то в этом роде.
Если вы можете гарантировать одно и то же имя пакета / класса, но не всегда, когда это точно той же копии, тогда вам нужно добавить поле serialVersionUID
с тем же значением в класс (es), о котором идет речь.
package shared;
import java.io.Serializable;
public class Message implements Serializable {
private static final long serialVersionUID = 1L;
// ...
}
Причина в том, что readObject () в ObjectInputStream практически реализуется как:
String s = readClassName();
Class c = Class.forName(s); // Here your code breaks
Object o = c.newInstance();
...populate o...