如果我有这样的课程:
public class Name implements Serializable {
private final String firstName;
private final String lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我添加另一个方法(并没有其他字段),它的计算的serialVersionUID会改变吗?
例如,添加方法:
public String getFullName() {
return firstName + " " + lastName;
}
Run Code Online (Sandbox Code Playgroud)
或者,是否有一个很好的工具来解决这个问题?
在我的应用程序中,我试图通过意图将可序列化对象传递给另一个活动.意图并非完全由我创建,它是通过搜索建议创建和传递的.
在搜索建议的内容提供程序中,创建对象并将其放置在SUGGEST_COLUMN_INTENT_EXTRA_DATAMatrixCursor 的列中.但是,在我调用的接收活动中getIntent().getSerializableExtra(SearchManager.EXTRA_DATA_KEY),返回的对象是String类型,我无法将其强制转换为原始对象类.
我尝试为我的对象制作一个parcelable包装器,调用out.writeSerializable(...)并使用它,但同样的事情发生了.
返回的字符串就像一个通用的Object toString(),即com.foo.yak.MyAwesomeClass@4350058,所以我假设toString()被调用到我无法控制的地方.
希望我只是遗漏了一些简单的东西.谢谢您的帮助!
编辑:我的一些代码
这是在充当搜索权限的内容提供者中:
//These are the search suggestion columns
private static final String[] COLUMNS = {
"_id", // mandatory column
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA
};
//This places the serializable or parcelable object (and other info) into the search suggestion
private Cursor getSuggestions(String query, String[] projection) {
List<Widget> widgets = WidgetLoader.getMatches(query);
MatrixCursor cursor = new MatrixCursor(COLUMNS);
for (Widget w : widgets) {
cursor.addRow(new Object[] {
w.id
w.name
w.data //This …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中有一个类,我已经制作了Parcelable,以便它可以在活动之间传递.
我希望能够将此对象保存到文件系统.似乎既然我已经实现了Parcelable,那么将它的输出传递给文件系统并稍后再读取是有意义的.
有没有正确的方法来做到这一点?或者,如果我想在活动之间传递对象并将其保存到文件系统,我必须同时实现Parcelable和Serialiazble吗?
我对此感到困惑。因为在实现 Serializable 类时,我们需要使用类似的类FileOutputStream,ObjectOutputStream或者类似的东西。那我们为什么不直接用这些类来做输出对象到文件、从文件输入对象这样的事情,直接维护对象的状态呢?为什么我们要先实现 Serializable 然后再做同样的事情?
java serialization objectoutputstream serializable fileoutputstream
我希望有人可以为我澄清这一点,以便我能更好地理解JAXB对象的编组是如何工作的.
通过阅读和查看示例,我理解JAXB对象必须实现,java.io.Serializable以便可以正确编组和解组对象.我有点不确定的部分是当你的一个JAXB对象没有实现可序列化时会发生什么(读:后果是什么)?这在过去发生过并导致日志文件中的错误类似于
ERROR [example.package.name.MyJaxbClass.data]DiskStorageFactory.call{503} | Disk Write of -309037891 failed:
java.io.NotSerializableException: example.package.name.myJaxbClass$MyNonSerializedElement
Run Code Online (Sandbox Code Playgroud)
然而其余代码似乎工作正常.您的JAXB类实现可序列化的重要性以及当它们不实现时会发生什么?
代码
SngList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView a, View v, int position, long id) {
Intent intent = new Intent(getActivity(), NowPlaying.class);
intent.putExtra("Data1",Songinfo);
intent.putExtra("Data2",position);
startActivity(intent);
}
});
Run Code Online (Sandbox Code Playgroud)
接收类中的代码
Intent i = getIntent();
ArrayList<SongDetails> Songinfo2 = (ArrayList<SongDetails>)i.getSerializableExtra("Data1");
position=i.getIntExtra("Data2", 1);
Run Code Online (Sandbox Code Playgroud)
songDetials的代码
package sourcecode.jazzplayer;
import java.io.Serializable;
import android.graphics.Bitmap;
public class SongDetails implements Serializable{
Bitmap icon ;
String song;
String Artist;
String Album;
String Path;
int icLauncher;
public String getSong() {
return song;
}
public void setSong(String song) {
this.song = song;
}
public String …Run Code Online (Sandbox Code Playgroud) 我无法理解SerializationJava 1.6 的基础知识.
下面是Dog包含Class的实例变量的CollarClass:
Dog.java
public class Dog implements Serializable {
private Collar collar;
public Collar getCollar() {
return collar;
}
public void setCollar(Collar collar) {
this.collar = collar;
}
}
Run Code Online (Sandbox Code Playgroud)
Collar类没有实现Serializable接口,如下所示:
Collar.java
public class Collar {
private int size;
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试序列化时,Dog为什么它不抛出NotSerializableException?根据合同,整个对象图应该实现,Serializable但我的Collar班级不满足.
以下是此演示的主要方法:
public static void main(String[] args) …Run Code Online (Sandbox Code Playgroud) 我有下面提到的课程:
public class JsonHistoryList extends ArrayList<JsonHistory> implements Serializable{}
Run Code Online (Sandbox Code Playgroud)
我希望通过意图使用它
timerService.putExtra(TimerService.ACTIVITY_LIST_ARG, activities);
Run Code Online (Sandbox Code Playgroud)
但在我收到它之后(下面的方式)
JsonHistoryList temp = (JsonHistoryList) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
Run Code Online (Sandbox Code Playgroud)
在我的服务中它给了我例外:
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.epstim.captime.jsonmodel.JsonHistoryList
Run Code Online (Sandbox Code Playgroud)
我不明白为什么java无法处理该操作.
我已将服务代码更改为:
ArrayList<JsonHistory> temp = (ArrayList<JsonHistory>) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
activities.addAll(temp);
Run Code Online (Sandbox Code Playgroud)
它奏效了.
我有以下代码产生错误: Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm
它没有工作extends RealmObject,但是我想使用Realm轻松地放入数据库.有没有办法驱逐RealmObject字段,只使用@Parcel的基本pojo字段?
@Parcel
public class Feed extends RealmObject{
int id;
public String text;
public String time_created;
String time_modified;
int comments_count;
int likes_count;
String feed_type;
int obj_id;
String image;
String user_name;
String user_earthmile_points;
boolean liked;
boolean commented;
boolean is_private;
String url;
int feed_creator_id;
}
Run Code Online (Sandbox Code Playgroud) 背景
这是我的情况:我正在尝试创建一个基于内容的某些功能过滤RDD的类,但该功能在不同的场景中可能有所不同,所以我想用函数对其进行参数化.不幸的是,我似乎遇到了Scala捕获其闭包的问题.即使我的函数是可序列化的,但类不是.
从关闭清洁火花源的例子来看,它似乎表明我的情况无法解决,但我确信有一种方法可以通过创建正确(较小)的闭包来实现我想要做的事情.
我的守则
class MyFilter(getFeature: Element => String, other: NonSerializable) {
def filter(rdd: RDD[Element]): RDD[Element] = {
// All my complicated logic I want to share
rdd.filter { elem => getFeature(elem) == "myTargetString" }
}
Run Code Online (Sandbox Code Playgroud)
简化示例
class Foo(f: Int => Double, rdd: RDD[Int]) {
def go(data: RDD[Int]) = data.map(f)
}
val works = new Foo(_.toDouble, otherRdd)
works.go(myRdd).collect() // works
val myMap = Map(1 -> 10d)
val complicatedButSerializableFunc: Int => Double = x => myMap.getOrElse(x, 0)
val doesntWork …Run Code Online (Sandbox Code Playgroud) serializable ×10
java ×6
android ×5
parcelable ×2
apache-spark ×1
arraylist ×1
closures ×1
jaxb ×1
parceler ×1
realm ×1
scala ×1
search ×1
servlets ×1