covariant returns for CharBuffer.subSequence

Martin Buchholz martinrb at google.com
Fri Aug 1 00:58:13 UTC 2008


We would like to have return types of methods be the most covariant
as is reasonable.  The only problem is compatibility.
For classes that cannot be subclassed by users,
changing covariant returns is almost 100% compatible.
(We all know that no change is 100.000000% compatible)

The spec for CharBuffer.CharSequence appears to guarantee that
the returned object is itself a CharBuffer, so all we need to
change is the return type:

Hence:

diff --git a/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java
b/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java
--- a/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java
+++ b/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java
@@ -186,7 +186,7 @@

     // --- Methods to support CharSequence ---

-    public CharSequence subSequence(int start, int end) {
+    public CharBuffer subSequence(int start, int end) {
         int pos = position();
         int lim = limit();
         assert (pos <= lim);
diff --git a/src/share/classes/java/nio/Direct-X-Buffer.java
b/src/share/classes/java/nio/Direct-X-Buffer.java
--- a/src/share/classes/java/nio/Direct-X-Buffer.java
+++ b/src/share/classes/java/nio/Direct-X-Buffer.java
@@ -391,7 +391,7 @@

     // --- Methods to support CharSequence ---

-    public CharSequence subSequence(int start, int end) {
+    public CharBuffer subSequence(int start, int end) {
         int pos = position();
         int lim = limit();
         assert (pos <= lim);
diff --git a/src/share/classes/java/nio/Heap-X-Buffer.java
b/src/share/classes/java/nio/Heap-X-Buffer.java
--- a/src/share/classes/java/nio/Heap-X-Buffer.java
+++ b/src/share/classes/java/nio/Heap-X-Buffer.java
@@ -566,7 +566,7 @@

     // --- Methods to support CharSequence ---

-    public CharSequence subSequence(int start, int end) {
+    public CharBuffer subSequence(int start, int end) {
         if ((start < 0)
             || (end > length())
             || (start > end))
diff --git a/src/share/classes/java/nio/StringCharBuffer.java
b/src/share/classes/java/nio/StringCharBuffer.java
--- a/src/share/classes/java/nio/StringCharBuffer.java
+++ b/src/share/classes/java/nio/StringCharBuffer.java
@@ -99,7 +99,7 @@
         return str.toString().substring(start + offset, end + offset);
     }

-    public final CharSequence subSequence(int start, int end) {
+    public final CharBuffer subSequence(int start, int end) {
         try {
             int pos = position();
             return new StringCharBuffer(str, -1,
diff --git a/src/share/classes/java/nio/X-Buffer.java
b/src/share/classes/java/nio/X-Buffer.java
--- a/src/share/classes/java/nio/X-Buffer.java
+++ b/src/share/classes/java/nio/X-Buffer.java
@@ -1245,7 +1245,7 @@
      *          If the preconditions on <tt>start</tt> and <tt>end</tt>
      *          do not hold
      */
-    public abstract CharSequence subSequence(int start, int end);
+    public abstract CharBuffer subSequence(int start, int end);


     // --- Methods to support Appendable ---



More information about the core-libs-dev mailing list