Instantiation of abstract class

1,189 views
Skip to first unread message

Anderson Aroeira Araujo

unread,
Jul 18, 2012, 1:56:02 PM7/18/12
to mi...@dartlang.org
Hi,

How do I do a instantiation of an a abstract class or interface?
Eg:

Java
interface Callback<T> {
  void execute(T arg0);
}

Callback<String> cs = new Callback<String>() {
  void execute(String arg0) {
   ;
  }
}

Dart
abstract class Callback<T> {
  abstract void execute(T arg0);
}

or

interface Callback<T> {
  void execute(T arg0);
}

If I do:

var callback = new Callback<String>() {
  void execute(String arg0) {
   ;
  }
}

I get the markers in the Dart Editor: Instantiation of a abstract class or New expression does not resolve to a constructor

There is a better approach to this? 
Which is the Dart way?

Thanks in advance.

Ladislav Thon

unread,
Jul 18, 2012, 2:07:41 PM7/18/12
to Anderson Aroeira Araujo, mi...@dartlang.org
How do I do a instantiation of an a abstract class or interface?

You don't. There are no anonymous classes/object literals in Dart. See also http://dartbug.com/1089.

LT

Matthew Butler

unread,
Jul 18, 2012, 2:11:48 PM7/18/12
to mi...@dartlang.org, Anderson Aroeira Araujo
Exactly. You must Extend the abstract class into a concrete class, or implement the implicit interface of the abstract class in a concrete class.

Matt

Anderson Aroeira Araujo

unread,
Jul 18, 2012, 2:14:42 PM7/18/12
to mi...@dartlang.org
Thank you, guys. I'll wait then :-)

Josh Gargus

unread,
Jul 18, 2012, 2:14:43 PM7/18/12
to Anderson Aroeira Araujo, mi...@dartlang.org
In Dart, you don't need this shortcut syntax for creating anonymous callback subclasses.  Instead, just pass a closure:

doSomethingAsynchronously(arg1, 
(result) => print('the operation completed successfully with result: $result) )

Cheers,
Josh

Josh Gargus

unread,
Jul 18, 2012, 2:17:19 PM7/18/12
to Anderson Aroeira Araujo, mi...@dartlang.org
Grrr... I really need to figure out which Gmail shortcut I'm hitting to send prematurely...

doSomethingAsynchronous(arg1, arg2, (result) => print('completed with result: $result));

Cheers,
Josh

Matthew Butler

unread,
Jul 18, 2012, 2:19:16 PM7/18/12
to mi...@dartlang.org


On Wednesday, July 18, 2012 3:14:42 PM UTC-3, Anderson Aroeira Araujo wrote:
Thank you, guys. I'll wait then :-)

Please notice that the bug is closed as 'wontfix'. This feature will not be coming to Dart in the foreseeable future. 

Here is a discussion which provides a little additional information on the recommended alternative to anonymous classes.
https://groups.google.com/a/dartlang.org/forum/#!topic/misc/rUWJMuDfJWc

Matt
Reply all
Reply to author
Forward
0 new messages