PROPOSAL: Return 'this'

Marek Kozieł develop4lasu at gmail.com
Wed Mar 25 14:59:06 PDT 2009


AUTHOR: Lasu aka Marek Kozieł




OVERVIEW

FEATURE SUMMARY:
It allows the method to return reference to 'this' object.

MAJOR ADVANTAGE:
Simplification of “return this” statement.
'void' can be easy replaced with 'this'.

MAJOR BENEFIT(s): It would prevent NullPointerException, and make some
'builder' like interfaces look really clear and simple.

MAJOR DISADVANTAGE:
Returned value cannot be changed while inheritance, also other objects
cannot be returned.

ALTERNATIVES:
Self-bounded generics, This type, change returned type for every
method on each inheritance.





EXAMPLES

SIMPLE/ADVANCED EXAMPLE:
public class Builder {

  String text = "";

  public this add (char c){text+=c;}

  public this add (String c){
    if (c==null){
      text +="null";
      return; // this will be returned
    }
    text+=c;
  }

  public static void test(Builder builder) {
    builder.add('.').add("test()").add(':');
  }

}

package test;

public class ReturnThis {

  static class A { public this test() { } }

  static class B extends A { }

  static Class<?> getReturnedType(Class<?> classs) {
    try {
      return classs.getMethod("test").getReturnType();
    } catch (SecurityException e) {
      e.printStackTrace();
    } catch (NoSuchMethodException e) {
      e.printStackTrace();
    }
    return null;
  }

  public static void main(String[] args) {
    System.out.println(getReturnedType(A.class));
    // will print: class returnThis.ReturnThis$A

    System.out.println(getReturnedType((new A()).getClass()));
    // will print: class returnThis.ReturnThis$A

    System.out.println(getReturnedType(B.class));
    // will print: class returnThis.ReturnThis$B

    System.out.println(getReturnedType((new B()).getClass()));
    // will print: class returnThis.ReturnThis$B
  }
}




DETAILS

SPECIFICATION:
JLS 8.4 (modifications)

ResultType:
  Type
  void
  this*

A method declaration either specifies the type of value that the
method returns, uses the keyword void to indicate that the method does
not return a value, or uses the keyword this to indicate that the
method return the reference to 'this' object.

*Keyword this for return cannot occurs if method is static.


JLS 14.17 (modifications)

ReturnStatement:
  return Expressionopt ;

A return statement with no Expression must be contained in the body of
a method that is declared, using the keyword void, not to return any
value (§8.4), or in the body of a method that is declared, using the
keyword this , to return this reference (§8...),or in the body of a
constructor (§8.8).

COMPILATION:
Method just before exiting from it's scope returns 'this'.
Exceptions work same as before.
Returned object type is actual object type.

TESTING:
Normal way.

LIBRARY SUPPORT:
No.

REFLECTIVE APIS:
No.

OTHER CHANGES:
None.

MIGRATION:
None.

COMPATIBILITY
Backward: full.
Forward: Only jars.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6479372

http://java.net/cs/user/view/cs_msg/37432

http://lasu2string.blogspot.com/2009/03/return-this-proposal.html

PS.
Maybe this Joe consider as 'proposal'.
Any questions?



-- 
Pozdrowionka. / Regards.
Lasu aka Marek Kozieł

http://lasu2string.blogspot.com/



More information about the coin-dev mailing list