【发布时间】:2016-05-14 20:34:31
【问题描述】:
这是我的情况。我编写了一个存储上下文的播放列表类。播放列表有 9 个子类。不幸的是,要在 Intent 之间传递 Playlist,它必须实现 Serializable。这是一个问题,因为 Playlist 存储了一个上下文,因此 Iterator 可以工作,因为必须从 Iterator 重写的 Iterator 方法不能接受任何参数。因此,我必须将上下文存储在 somewhere 中,因为它需要确定播放列表的大小。这是(简化的)代码。
public abstract class Playlist implements Serializable, Iterable<Song>
{
private static final long serialVersionUID = 0L;
private Context context;
public Context getContext() { return context; }
public Playlist(Context context)
{
this.context = context;
}
public abstract int size(); //getContext() referenced in all currently written children
public abstract Song getSong(int index); //getContext() referenced in all currently written children
@Override
public PlaylistIterator iterator()
{
return new PlaylistIterator();
}
public class PlaylistIterator implements Iterator<Song>
{
private int current;
PlaylistIterator()
{
current = 0;
}
@Override
public boolean hasNext()
{
return current < size(); //SIZE HERE needs access to a context, but this method certainly can not take one, and neither can the constructor above.**
}
@Override
public Song next()
{
if (!hasNext())
throw new NoSuchElementException();
return getSong(current++);
}
@Override
public void remove()
{
throw new UnsupportedOperationException();
}
}
}
我读到您可以存储静态上下文,但这是糟糕的设计。我似乎找不到解决方法。
我考虑添加一个在 writeObject 中分配的静态上下文引用,然后在 readObject 中访问,因为转换应该几乎是即时的,因为序列化实现只是为了让播放列表可以在意图中传递。但即使这样也感觉很老套。
是否有一种常见的解决方法来处理我们无法序列化上下文的事实?我的解决方案在稳定性方面可以接受吗?这可能违反规则,但在这种情况下您有什么建议?
【问题讨论】:
-
尝试将逻辑与数据分离。然后您可以发送数据而不会遇到您遇到的问题。
标签: java android serialization