<< Back to previous view

[CLJ-1255] Support Abstract Base Classes with "reify" Created: 06/Sep/13  Updated: 06/Sep/13

Status: Open
Project: Clojure
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Major
Reporter: Mike Anderson Assignee: Unassigned
Resolution: Unresolved Votes: 2
Labels: interop


 Description   

Problem:

  • Various Java APIs depend on extension of abstract base classes rather than interfaces
  • "proxy" has limitations (no access to protected fields or super)
  • "proxy" has performance overhead because of an extra layer of functions / parameter boxing etc.
  • "gen-class" is complex and is complected with compilation / bytecode generation

In summary, Clojure does not currently have a good / convenient way to extend a Java abstract base class dynamically.

Proposal is to extend "reify" to allow a single abstract base class as well as interfaces/protocols. Code generation would occur as if the abstract base class had been directly extended in Java (i.e. with full access to protected members and with fully type-hinted fields). This change would be backwards-compatible with all existing uses of "reify".


Generated at Sun Apr 20 13:46:21 CDT 2014 using JIRA 4.4#649-r158309.