Re: Still no typedef
Andreas Leitgeb wrote:
Daniel Pitts <newsgroup.spamfilter@virtualinfinity.net> wrote:
Patricia Shanahan wrote:
Here's an alternative syntax suggestion:
class FooInt Foo<Comparator<Integer>>;
I think I would prefer interface over class for this.
No, not really, afterall one should also be able to do
FooInt x=new FooInt(42);
lateron. IMHO, at least.
Right, but FooInt is an interface to the class Foo<Comparator<Integer>>.
All that it *really* means is FooInt is an alias for
Foo<Comparator<Integer>>. Perhaps calling it a Type Alias is better
than a TypeDef.
Now that I think more about it, type aliases are another form of
abstraction/indirection that might be useful, especially if they are
implemented as more than typedefs in c++...
Imaging this:
class MyClass {
/* The following says,
ListType is the specific type we need,
and is assignable to List<FooBar>.
The fact that it is ArrayList is "hidden" from clients.
I'm assuming types would be static members automatically,
but if there were a way to have instance-specific types,
that would be even more "interesting".
*/
public type ListType implements List<FooBar> = ArrayList<FooBar>();
private ListType list;
public void setBackingList(ListType list) {
this.list = list;
}
public ListType getList() {
return list;
}
}
class OtherClass {
public void things() {
MyClass mc = new MyClass();
mc.setBackingList(new MyClass.ListType());
MyClass.ListType lt = mc.getList();
// lt's compile time type is List<FooBar> & MyClass.ListType.
MyClass.ListType doesn't expose ArrayList methods.}
}
This allows for a kind of interface that you can instantiate. Don't
mind me, random babbling and stream-of-consciousness dump.
--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>