Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The best practice is that the type of the variable is of the interface, not the implementation except in some special cases.


So stop using constructors and start using static factory methods. The return type of a static factory method can be the interface type.


Yeah, let's UML the hell out of everything to be enterprisey and be Martin Fowler-approved! This is what turned off a lot of people before!


Sorry, did "static factory" sound scary? How about "use a function to create your objects" instead?

So instead of doing this:

    Foo foo = new Foo("bar");
You can do this:

    Foo foo = Foo.of("bar");


Yeah, but how about the implementation?


This is complete nonsense if you're using a static constructor and not a factory. There's zero point to doing this for a local, statically constructed type. It's not a best practice.

If you were using a factory, var would infer the factory signature's type, which would normally be the interface.


No, it's not a complete nonsense, no. People abusing Java with overengineering and using factories and other enterprisey design patterns for everything made a lot of people leave the Java land!


> People abusing Java with overengineering and using factories and other enterprisey design patterns for everything made a lot of people leave the Java land!

Actually, people left Java land because they couldn't express what they needed to without using complicated design patterns.


A "static factory" is just a static method. You know, a function. Nothing over-engineered or enterprisey about using functions to allocate objects.


Why state the obvious?


> Why state the obvious?

So you think using functions is enterprisey and over-engineering things?


Read my other reply to you on the subject! The API might be a small syntactic change, but the concepts and the implementation behind those for noobs are not. They learn OOP and constructors and then you tell them - they suck, use factories via static methods.


Yes, but that's a fault in Java the language. Keeping Java bad doesn't solve that problem.


I agree. A little native support for wide-spread best practices would only be a good thing for Java.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: