如果发出相同的程序,但仅对字段bar
的数据结构进行单一更改而有所不同。
bar
表示相同的值HelloWorld
时,序列化是否会有所不同?示例:
//bar only represents "HelloWorld"
//Program 1 field is String
Class foo{
String bar; //"HelloWorld"
}
//Program 2 field is Character[]
Class foo{
Character[] bar; //{H','e','l','l','o','W','o','r','l','d'}
}
//Program 3 field is ArrayList<Character>
Class foo{
Arraylist<Character> bar; //{{put('H');put('e');put('l');put('l');put('o');put('W');put('o');put('r');put('l');put('d')}}
}
我在这里谈论和寻找的是否有名称或术语?
答案 0 :(得分:0)
Java不允许您在同一个包中拥有多个同名的类。当您尝试编译示例时,您应该会看到“foo已定义”之类的错误。
Java Serialization包含类,因此序列化为“foo”类不能随后反序列化为不同的“foo2”类。这也意味着“foo”的序列化将始终不同于“foo2”的序列化。
如果你的目标是让一个“foo”类将它的String暴露为字符数组或者ArrayList,你可以在一个类中完成所有这些操作。
import java.util.*;
public class TooManyFoo {
private final String bar;
public TooManyFoo( String bar ) {
this.bar = bar;
}
public String getBar() {
return bar;
}
public Character[] getBarAsArray() {
Character[] barAsArray = new Character[bar.length()];
for ( int i = 0; i < barAsArray.length; i++ ) {
barAsArray[i] = Character.valueOf( bar.charAt( i ) );
}
return barAsArray;
}
public List<Character> getBarAsList() {
List<Character> barAsList = new ArrayList<Character>();
for ( char c : bar.toCharArray() ) {
barAsList.add( Character.valueOf( c ) );
}
return barAsList;
}
}
另一方面,大多数开发人员只希望通过getter直接在foo中使用String栏。
我的观点是,Java序列化包括类,因此您必须反序列化到同一个类中。