Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的java类突然变得不可序列化_Java_Android_Serialization - Fatal编程技术网

我的java类突然变得不可序列化

我的java类突然变得不可序列化,java,android,serialization,Java,Android,Serialization,我的一个类突然开始抱怨它不可序列化。 我已经改变了其中的一些东西,但在它的定义中看不到任何可能导致它的东西 我在那个类上得到notserializableexception 这些都是课程开始时的定义,我看不到任何会导致问题的内容 private static final long serialVersionUID = 1L; private ArrayList <Card> cards; private ArrayList <Card> selectedCards; pr

我的一个类突然开始抱怨它不可序列化。 我已经改变了其中的一些东西,但在它的定义中看不到任何可能导致它的东西

我在那个类上得到notserializableexception

这些都是课程开始时的定义,我看不到任何会导致问题的内容

private static final long serialVersionUID = 1L;
private ArrayList <Card> cards;
private ArrayList <Card> selectedCards;
private HashSet <Card> knownCards;
private ArrayList <Card> aceHighs;
private int numberOfKnownCards = 0;
private int valueOfKnownCards = 0;

public static final int sortHand = 1;
public static final int sortSelectedCards = 2;
protected int[] cardsPerSuit = {0,0,0,0}; 
private int numberOfDifferentSuits = 0;
private int[] cardsPerRank = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
private int numberOfDifferentRanks = 0;



private int whereToTakeFrom;
private int whichDiscardToTake;

private int cardCount = 0;
private int selectedCount = 0;
public  int handValue = 0;
private Deck deck;
这两个比较器可能会产生问题:

private Comparator<Card> byRank = new Comparator<Card>()  {

public int compare(Card c1, Card c2) {
   return c2.getCardRank()-c1.getCardRank();
}
};

private Comparator<Card> bySuitAndRank = new Comparator<Card>()  {

public int compare(Card c1, Card c2) {
   return (c1.getCardSuit()-c2.getCardSuit())*100 + c2.getCardRank()-c1.getCardRank();
}
};
private Comparator byRank=new Comparator(){
公共整数比较(卡c1、卡c2){
返回c2.getCardRank()-c1.getCardRank();
}
};
私有比较器bySuitAndRank=新比较器(){
公共整数比较(卡c1、卡c2){
返回(c1.getCardSuit()-c2.getCardSuit())*100+c2.getCardRank()-c1.getCardRank();
}
};

尝试将出现问题的字段标记为瞬态。也许您可以在以后反序列化时重新构建它们。

根据堆栈跟踪,class
il.co.anykey.games.yaniv.lite.Hand$1(class
Hand
中的匿名类)不可序列化。

它有公共,无参数构造函数?是否
Card
Deck
也可
Serializable
?是否实现Serializable?如果是,您是否更改了
serialVersionUID
的值?而且,UID为1不是一个很好的选择……对所有人来说都是。虽然卡没有无参数构造函数(对它来说毫无意义)。然而,它一直都是这样。向我们展示完整的堆栈跟踪。这可能会给问题所在提供更多线索。我试着遍历所有字段,一次标记几个。仍然没有帮助。我确实有几个内部类,但认为它们是问题所在,所以我将它们移到了外部文件中。现在没有。但是堆栈跟踪确实会抱怨该类。它不仅仅是一个内部类,它是一个匿名类。你检查过了吗?这是任何类型的
newfoo(){/*…方法/字段…*/}
。这似乎就是问题所在。我已经更改了代码,以便在使用比较器时创建比较器,而不是提前创建。工作完美。非常感谢!很高兴你解决了这个问题,并感谢投票:)我认为你可以通过创建接口
接口CompSer Extended Comparator,serializable
并实现它,而不是普通的Comparator,使比较器可序列化。只是为了扩展,任何时候你使用
new
将代码“放入变量”时,与比较器、可运行程序和侦听器通常的情况一样,java编译器创建一个表示它的匿名[内部]类。
private Comparator<Card> byRank = new Comparator<Card>()  {

public int compare(Card c1, Card c2) {
   return c2.getCardRank()-c1.getCardRank();
}
};

private Comparator<Card> bySuitAndRank = new Comparator<Card>()  {

public int compare(Card c1, Card c2) {
   return (c1.getCardSuit()-c2.getCardSuit())*100 + c2.getCardRank()-c1.getCardRank();
}
};