Re: Converting Sets
On 2/2/2012 7:06 AM, Mayeul wrote:
On 02/02/2012 14:32, Roedy Green wrote:
Ah, but this this you created is NOT a Set<Y>. You cannot add
arbirary Y to it, just more X. I feel queasy. How could the compiler
keep track that setOfY could only contain X.
It cannot.
I think this is covered in Effective Java. Generics are a compile time
thing. If you want runtime, you have to roll your own (I don't know of
any classes in the API that allow you to have a runtime type parameter,
although I guess there may be some).
class MySet extends SomeSet {
Class type;
MySet( Class type ) { this.type = type; }
void add( Object o ) {
if( o instanceof type ) super.add( o );
}
}
I think is the above is the gist of how EJ handles it. Add a type token
(the "type" variable) and test for types as they are added. If you want
generics too, add them in:
class MySet<T> extends Set<T> {
Class<? extends T> type;
MySet( Class<? extends T> type ) { this.type = type; }
void add( T o ) {
if( o instanceof type ) super.add( o );
}
}
Not compiled, but I think that gives the right idea.