java - accessing the unique methods of classes that implement an interface -


i have class called militaryreport implements reportable interface:

public class militaryreporter implements reportable {      public string reportable_type(){         return "militaryreport";     }      public string reportable_db_name() { return "military_reports"; }      public void setuniqueattribute(int attr) { this.uniqueattribute = attr; }      public int uniqueattribute(){        return some_unique_attribute_to_military;     } } 

i have class called oilreport implements reportable interface:

public class oilreport implements reportable {      public string reportable_type(){         return "oilreport";     }      public string reportable_db_name() { return "oil_reports"; }      public int anotheruniqueattribute(){        return some_unique_attribute_to_oil;     } } 

this reportable interface:

public interface reportable {      public string reportable_type();      public string reportable_db_name(); } 

here's problem. reportable strategy belongs instance of report. report can have type of reportable e.g. military, oil, driver, etc. these types implement same interface have unique elements.

i able assign reportable report so:

public class report {      private reportable reportable;      public void setreportable(reportable reportable){ this.reportable = reportable; }      public reportable reportable(){         return reportable;     } } 

then in client code, able assign reportable instance:

militaryreporter reportable = new militaryreporter(); reportable.setuniqueattribute(some_val); report.setreportable(reportable); 

but when later access reportable, cannot access of unique methods. can access methods implemented in interface. not compile:

report.reportable.uniqueattribute(); 

the problem don't want set reportable's data type militaryreport. want data type reportable, can assign type of reportable it. @ same time, want access unique methods of reportables.

how can around limitation? design pattern?

the whole idea of interface don't care type of reportable is. when declare @ interface level, reportable instead of militaryreportable, see methods declared on reportable. if don't want declare militaryreportable, know that's is, can cast it:

((militaryreportable)report.reportable).someuniquemethod()


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -