So is it not possible to do this:
package java.lang;
public interface RootInterface {
default boolean equals(Object other) {
return this == other;
}
default int hashCode() {
return System.identityHashCode(this);
}
}
Then interpret all interfaces that don't extend anything as implicitly extending RootInterface? Then remove equals and hashCode from java.lang.Object, and get it to implement RootInterface?
package java.lang.Object;
public class Object implements RootInterface {
... // no hashCode or equals
}
Result: Interfaces can provide effective defaults for equals and hashCode? Nothing else breaks (except that RootInterface might be better off in a package not implicitly imported)?
This round tuit was brought to you by avoiding real work.
Update: It's possibly a bad idea for interfaces not to implicitly extend Object, as <?> and <? extends Object> then wouldn't be able to match any interface type, even though you could be sure the underlying object was certainly an Object.

No comments:
Post a Comment