code_junkie

Generic Method Type Safety

Nov 10th, 2011
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. public abstract class AbstractNodeType {
  2. // ..
  3.  
  4. public abstract <T extends AbstractNode> T createInstance();
  5. }
  6.  
  7. public class ThingType {
  8. // ..
  9.  
  10. public Thing createInstance() {
  11. return new Thing(/* .. */);
  12. }
  13. }
  14.  
  15. // FYI
  16. public class Thing extends AbstractNode { /* .. */ }
  17.  
  18. interface Node{
  19. }
  20. interface NodeType<T extends Node>{
  21. T createInstance();
  22. }
  23. class Thing implements Node{}
  24. class ThingType implements NodeType<Thing>{
  25. public Thing createInstance() {
  26. return new Thing();
  27. }
  28. }
  29. class UberThing extends Thing{}
  30. class UberThingType extends ThingType{
  31. @Override
  32. public UberThing createInstance() {
  33. return new UberThing();
  34. }
  35. }
  36.  
  37. public abstract class AbstractNodeType<T extends AbstractNode> {
  38. public abstract T createInstance();
  39. }
  40. public class ThingType<Thing> {
  41. public Thing createInstance() {
  42. return new Thing(...);
  43. }
  44. }
Add Comment
Please, Sign In to add comment