2017-05-14 44 views
1

私はいくつかのクラス(例えば、レルムテーブル)を持っています。 私は同じ方法でそれぞれを処理します(下記のコードを参照)。クラス処理、反復コード

クラスの名前のみを変更する:Ticket.class、さらにSecondTable.classなどとなります。 クラス名はあらかじめわかっています。

。クラスを引数として1つのメソッドを作る方法は?

Q2。または、どのようにすればいいのですか?[クラス] do ... "

Realm realm = Realm.getDefaultInstance(); 
RealmResults<Ticket> tickets = realm.where(Ticket.class).findAll(); 
realm.beginTransaction(); 
for (int i = tickets.size() - 1; i >= 0; i--) { 
    if ... { 
     Notification notification = new NotificationCompat.Builder(this)...; 
     StartMyAsyncTask().execute(tickets.get(i)); 
     // etc... 

     // delete from DB 
     tickets.get(i).removeFromRealm(); 
    } 
} 
realm.commitTransaction(); 

そしてTicketクラスには、次のようになります。

public class Ticket extends RealmObject {... } 
+0

トランザクションを開く**クエリは – EpicPandaForce

答えて

2

TicketSecondTableため

public interface IAction { 
    void action(); 
} 

をし、これを実装:新しいインスタンスを作成し、上記生成されたメソッドを呼び出す

public class Ticket extends RealmObject implements IAction { 

    @Override 
    public void action(){...} 
} 

次のステップはテンプレートメソッドです(おそらく、あなたのUtilsクラス):前

public static <T extends RealmObject & IAction> void yorForEachMethod(Class<T> cls) { 
    Realm realm = Realm.getDefaultInstance(); 
    RealmResults realmObjects = realm.where(cls).findAll(); 
    realm.beginTransaction(); 
    for (int i = realmObjects.size() - 1; i >= 0; i--) { 
     if ... { 
      Notification notification = new NotificationCompat.Builder(this)...; 
      // you can evaluate implementation of action method from IAction interface 
      ((IAction)realmObjects.get(i)).action(); 
      // or pass to assync task and work with IAction interface 
      //StartMyAsyncTask().execute((IAction)realmObjects.get(i)); 
      // etc... 

      // delete from DB 
      realmObjects.get(i).removeFromRealm(); 
     } 
    } 
    realm.commitTransaction(); 
} 
+1

ありがとう!出来た。 – tim4dev

+0

@ tim4dev、あなたは大歓迎です! )あなたの質問に答えた場合は、回答を受け入れたものとしてマークする必要があります。 https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Sergey

0

1.YouはObjectとしてクラスとメソッドを作成することができます。あなたがオブジェクトごとに更新されます

public void yourMethod(Object yourclass) {} 

2.Since毎回あなたが組合インターフェースを作成することができます

yourMethodClass.yourMethod(ObjectName); 
+0

申し訳ありませんが、私はあまりにも単純化したサンプルコードを書きました。私は訂正をした。 – tim4dev