1. Why
public abstract class ObjectSupport {
public abstract boolean equals(Object self, Object other);
public abstract int hashCode();
public static ObjectSupport of(Lookup lookup, String... fields) {
// impl details
}
// impl details
}
and not something like?
interface ObjectSupport<T> {
public boolean equals(T self, T other);
public int hashCode(T obj);
public static <T, U extends ObjectSupport<T>> T of(Lookup lookup, Class<
U> iface, Class<T> obj) {
// impl details
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface ObjectSupportField {
}
2. I don't understand why you can't use
https://docs.oracle.com/javase/9/docs/api/java/lang/invoke/MethodHandles.Lookup.html#defineClass-byte:A-
instead
of unsafe. If you can use
https://docs.oracle.com/javase/8/docs/api/java/lang/invoke/LambdaMetafactory.html
things
might be easier to optimise because the VM doesn't trust nonstatic final
fields but I don't think you'll need to rely on that.
3. The raw class file isn't always available at runtime so you can't
necessarily use ObjectSupportImpl as a template.
4.
https://github.com/forax/exotic/blob/master/src/main/java/com.github.forax.exotic/com/github/forax/exotic/ObjectSupport.java#L180
Pretty
sure you want a static final field here. You can do that if you're using
ObjectSupportImpl as a raw template. Unfortunately defineClass doesn't
accept arguments so you have to use wonky garbage like a hashmap to pass
runtime data that can't be embedded in a class file easily.
--
You received this message because you are subscribed to the Google Groups
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.