<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Answers to: Inconveniences when using inner classes in Ivy Script</title><link>https://answers.axonivy.com/questions/1756/inconveniences-when-using-inner-classes-in-ivy-script</link><description>&lt;p&gt;Suppose I have two classes, each of them provides &lt;code&gt;Builder&lt;/code&gt; API.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// This is in Ivy Script
import example.Person.Builder;

Builder errorPersonBuilder = new Person.Builder(); // this line generates a compilation error saying class Person.Builder not found.

Builder workingPersonBuilder = new Builder(); // this works.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is still OK if there is only one &lt;code&gt;Builder&lt;/code&gt; inside the context. As soon as there is another:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// This is in Ivy Script
import example.Person.Builder;
import example.Company.Builder; // compilation error of collision, there are two classes named Builder.


Builder workingPersonBuilder = new Builder(); // this works, see above.

Builder anotherBuilder = new Builder(); // which builder?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If Ivy Script could supports the same as normal Java, we could do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import example.Person.Builder;
import example.Company.Builder;

Person.Builder personBuilder = new Person.Builder();
Company.Builder companyBuilder = new Company.Builder();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Should this be supported in Ivy Script?&lt;/p&gt;</description><atom:link href="https://answers.axonivy.com/questions/1756/inconveniences-when-using-inner-classes-in-ivy-script" rel="self"></atom:link><language>en</language><lastBuildDate>Fri, 29 Apr 2016 08:28:08 -0400</lastBuildDate><item><title>Answer by Reto Weiss</title><link>https://answers.axonivy.com/questions/1756/inconveniences-when-using-inner-classes-in-ivy-script/1758</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;This code here:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import example.Person.Builder;
import example.Company.Builder;

Person.Builder personBuilder = new Person.Builder();
Company.Builder companyBuilder = new Company.Builder();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;does not work in Java as well. The compiler says:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The import test.Person.Builder collides with another import statement
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In java and IvyScript the following works:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import test.Company;
import test.Person;

Person.Builder personBuilder = new Person.Builder();
Company.Builder companyBuilder = new Company.Builder();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are working with builders, we usally provide a static method to start building. E.g.:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class Person
{
  public static Builder build()
  {
    return new Builder();
  }

  public static class Builder
  {}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then you do not have to import the Builder itself. Simple use:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Person person = Person.build().withName("Weiss").withGender(Gender.MALE).toPerson();
&lt;/code&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Reto Weiss</dc:creator><pubDate>Fri, 29 Apr 2016 08:28:08 -0400</pubDate><guid>https://answers.axonivy.com/questions/1756/inconveniences-when-using-inner-classes-in-ivy-script/1758</guid></item></channel></rss>