2016-05-22 6 views
2

(AndroidのJavaプロジェクトで)以下の構造を有するように、オブジェクトを保存します。我々が多型を使用している原因親クラスタイプのリストを格納するのに必要とされているいくつかの時点でBackendless - 親クラス

public abstract class A { 
    ... 
} 

public class B extends A { 
    ... 
} 

public class C extends A { 
    ... 
} 

しかし、我々は次のように親の型のオブジェクトを格納しようとした場合:私たちは抽象クラスを保存しようとしているためエラー:

A aObject = xObject; //(xObject could be an object of type B or C) 
Backendless.Persistence.save(aObject, new AsyncCallback<A>() { ... 

を私たちは「CREATORを任意のプロパティせずにオブジェクトを更新できません」を取得します。

それがこの目標を達成することは可能ですか?子クラスBとCの違いは、イメージとテキストのレンダリングのようないくつかのアクションを実行する方法です。

編集1:特定の場合

特定の場合には(ミーム内部いくつかのテキストと面白い画像である)ミームを作成するAndroidアプリです。この場合、Memesは古典的な方法で描くことができます。これは上部にテキスト、下部にもう1つのテキストを含むイメージです。 MemesはQuoteとしても描くことができます。これは右の黒い四角の画像であり、文章と著者が含まれています。

この問題をモデル化するために、属性(name、topText、bottomText、image ...など)と子クラスがイメージを描画するために使用するメソッドと2つの子クラスClassicMemeを含む抽象クラスMemeを作成しました独自の方法でmemeを描画するQuoteMemeなどがあります。

問題は、ユーザーがミームを作成しているとき、彼は描画するミームの種類を切り替えることができるということですので、私はこのような状況に対処するための多型の参照が必要です。私はミーム(基底クラス)オブジェクトを格納するために進むとき、私はミームは抽象クラスであり、そしてもちろん、私はこの基本クラス参照に含まれている子オブジェクトの種類を知らないので、それが不可能であると認識します。 (私がはっきりと説明したことを願っています)。

+0

したがって、すべてのデータプロパティはスーパークラスであり、それは永続化層に登録されていますか?サーバーからダウンロードするとどうなりますか?構図はあなたのためのより良いモデルです... – Wain

+0

私はこの問題を解決するために構成について考えてきましたが、私はそれをはっきりと見ません。例を挙げて答えを教えてください。 –

答えて

1

この問題を持つためのあなたの理由は、クラスということである。

が異なっ

この問題/要件は、あなたのデータモデルクラスとは何の関係もありませんいくつかの画像とテキストのレンダリングのようないくつかのアクションを実行します同じクラスにはいけません。データモデルクラスは、プロパティのみを持ち、実質的に機能がゼロのプレーンクラスである必要があります。

だから、あなたは、データの表示方法に関連するロジックを所有するために、いくつかの「プレゼンター」クラス、またはそのようなものを作成する必要があります。データを表示する必要がある場合は、それらのクラスのインスタンスを作成し、データモデルクラスのインスタンスに渡します。その後、必要なデータを取得し、必要に応じて表示することができます。このようにして

データモデルと永続層がきれいで有効であり、そして、あなたは簡単にそのデータモデルに影響を与えることなく、あなたが望む任意のプレゼンテーションスタイルを追加することができます。

+0

申し訳ありませんが、私は近くにいると思いますが、私はまだ構成を使って疑問を抱いています。それぞれのクラスが作成されたときに与えられたタイプAの1つの属性を持つクラスBとクラスCを持ちます(Aはモデル、属性)。この時点で私の質問は、多態的な方法でそれを管理する方法です。なぜなら、コードではBとCオブジェクトの間に差をつけてはならず、モデルの名前を格納する必要があるからです。 –

+0

なぜ彼らはモデルの名前で保存されますか?モデルオブジェクトは実際に異なる型ですか?データは同じだが、さまざまな方法で表示することができます。 – Wain

+0

申し訳ありませんが、私は本当に悪いことを説明したと思います。BとCの両方のオブジェクトは、異なる方法で描かれた概念の同じ表現であるため、Aモデルの名前で保存する必要があります。 –

関連する問題