读书人

为何可以直接使用CharBuffer中的抽象方

发布时间: 2013-08-01 15:23:18 作者: rapoo

为什么可以直接使用CharBuffer中的抽象方法get()和put()
本帖最后由 flyerttt 于 2013-07-24 21:53:55 编辑

import  java.nio.CharBuffer;

public class BufferTest{
private static int index = 0;
private static String[] strings = {
"A random string value",
"The product of an infinite number of monkeys",
"Hey hey we're the Monkees",
"Opening act for the Monkees: Jimi Hendrix",
"'Scuse me while I kiss this fly'",
"Help Me! Help Me!"
};
private static void drainBuffer(CharBuffer buffer){
while (buffer.hasRemaining()){
System.out.print(buffer.get());
}
System.out.println();
}
private static boolean fillBuffer(CharBuffer buffer){
if ( index >= strings.length) return false ;
String string=strings[index++];
for (int i=0;i<string.length();i++)
buffer.put(string.charAt(i));
return true ;
}
public static void main(String args[]) throws Exception{
CharBuffer buffer = CharBuffer.allocate (100);
while (fillBuffer(buffer)){
buffer.flip();
drainBuffer (buffer);
buffer.clear();
}
}
}


CharBuffer是抽象类不能实例化,所以只能用allocate分配缓冲区,这个都知道。但是jdk文档里CharBuffer的get()方法明明是:


public abstract char get()
我又打开了CharBuffer.java,里面确实只有public abstract char get();,不知道到底是怎么一回事,难道JVM里默认使用了其重载版本 public CharBuffer get(char[] dst,int offset,int length)? CharBuffer 抽象方法get 直接使用
[解决办法]
CharBuffer buffer = CharBuffer.allocate (100);
System.out.println(buffer.getClass()); // 看看是啥
[解决办法]
allocate这个方法是静态的,不是抽象的,返回一个CharBuffer 类型的对象,这个对象是CharBuffer 的一个实现类而已。就像List的subList方法,返回一个List类型的对象。

读书人网 >J2SE开发

热点推荐