2017-05-14 126 views
1

我有几个类(例如,领域表)。 我以相同的方式处理每个对象(请参阅下面的代码)。类处理,重复代码

仅更改班级的名称:Ticket.class,进一步它将是SecondTable.class依此类推。 类名是事先知道的。

Q1。如何使一个类作为参数的方法?

Q2。或者我怎么能做一些像“每个[classes] 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

你可以创建一个联合接口:

public interface IAction { 
    void action(); 
} 

TicketSecondTable并实现这一点:

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