Friday, 10 August 2018

Why we declare WebDriver driver = new FirefoxDriver(); and not FirefoxDriver driver = new FirefoxDriver();

Why do we declare WebDriver driver = new FirefoxDriver();
and not FirefoxDriver driver = new FirefoxDriver();
To put in other words, why List<String> list = new ArrayList<String>();
and not ArrayList<String> list = new ArrayList<String>();


Here, List or WebDriver is an Interface - a contract or set of rules created for implementing class.
So, in Java, we cannot create an instance of interface. ie
I cannot say List<String> list = new List<String>();
But classes can be instantiated. Hence,
FirefoxDriver fd= new FirefoxDriver(); and
ArrayList list=new ArrayList<String>();
are meaningful. Because both are classes in Java.
Now, coming back to the same question. When we say FirefoxDriver fd= new FirefoxDriver(); or ArrayList list=new ArrayList<String>();
This is nothing but using specific implementation. Arraylist or FirefoxDriver. If we have coded like this, then in the future, if we want to switch to
other implementations of List or WebDriver... then we need to modify our complete code as there is no guarantee that the rest of the code doesn't make use of methods specific to the particular class. However, if given like this:
List<String> list = new ArrayList<String>();
WebDriver driver = new FirefoxDriver();
It gives the flexibility to switch implementation any time with minimal rework.
For eg: changing ArrayList to LinkedList you can change the code to List<String> list = new LinkedList<String>(); from List<String> list = new ArrayList<String>();.

No comments:

Post a Comment

How to schedule RFT (Rational Functional Tester) scripts to run using Jenkins / schedule

How to schedule RFT (Rational Functional Tester) scripts to run using Jenkins / schedule 1. Create a batch file with following content ...