Comment

Comment by masklinn

> It's possible to implement it as instance method

It makes no sense, if you're doing that you've switched to full-blown factories (abstracts or builders), you're not using factory methods anymore.

> Whether it be a static factory method or an instance method, fact is you need a reference to an implementation (class). In dart, you can do

> List someListInstance = new List();

> where List is an interface. There is none class needed in your consuming code, none.

That's got nothing to do with factories, or interfaces.

> You need _some_ class (whether it be a static method on it, or an instance method) to get a new instance of the interface.

You always need a class, even in Dart there has to be a default List implementation of some sort which can be called (and has to be specified on the interface, it's not like you can even provide your own default implementation of a third party's interface). As to the calling code needing to know about that one concrete implementation:

    abstract class Foo {
        public static Foo foo() {
            return new FooImpl();
        }

        public abstract void printFoo();
    }

    class FooImpl extends Foo {
        public void printFoo() {
            System.out.println("I am FooImpl");
        }
    }

    class Main {
        public static void main(String[] args) {
            Foo foo = Foo.foo();
            foo.printFoo();
        }
    }
Oh look at that, the calling code does not know anything about FooImpl.

> Named constructors felt very liberating when working with Dart.

Yeah, that's so much more liberating than:

    List.from([instance1, instance2]);
Wait, no it's not.
parent masklinn 14 years ago

Discussion

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton