[e-lang] Generators for the other Joe-E array types
Tyler Close
tyler.close at gmail.com
Sun Dec 16 10:38:05 EST 2007
Hi David,
On Dec 15, 2007 9:30 PM, David Wagner <daw at cs.berkeley.edu> wrote:
> You mentioned that you wanted to eliminate all unsafe casts. The
> interface above may require casting the return value of snapshot()
> to the appropriate subtype of ConstArray. For example, consider the
> following usage:
> Generator<T> g = PowerlessArray.generate(n);
> ...
> PowerlessArray<T> a = (PowerlessArray<T>) g.snapshot();
> The last line requires an unchecked cast. Is that okay? Would you
> prefer to have the interface be designed to be statically type-safe?
>
> For example, would the following alternative be better?
> interface Generator<A extends ConstArray<T>,T> {
> void append(T value);
> A snapshot();
> }
> Each Joe-E array type would provide a generate() method that returns
> the appropriate type; e.g., PowerlessArray<T>.generate()'s return type
> would be Generator<PowerlessArray<T>,T>. That would eliminate the
> need to cast the return value of Generator.snapshot() to the appropriate
> array type. Does this seem like an improvement?
I was thinking PowerlessArray would provide a public implementation of
the Generator interface and make use of Java's support for covariant
return types in the implementation of the snapshot() method, so...
public final class
Generator<T> implements org.joe_e.array.Generator<T> {
...
public PowerlessArray<T>
snapshot() { return ...; }
}
Use would then be:
PowerlessArray.Generator<T> g = PowerlessArray.generate(n);
PowerlessArray<T> a = g.snapshot();
This is similar to how the ByteArray.Generator class currently works.
--Tyler
--
The web-calculus is the union of REST and capability-based security:
http://www.waterken.com/dev/Web/
Name your trusted sites to distinguish them from phishing sites.
https://addons.mozilla.org/firefox/957/
More information about the e-lang
mailing list