Я хочу расширить AbstractStringBuilder и получить класс, аналогичный StringBuilder, но с методом hashCode(), идентичным String.hashCode(). Намерение состоит в том, чтобы использовать этот новый подкласс в качестве ключа в Hashtable. Я хочу поэкспериментировать с Hashtable и этим новым подклассом и посмотреть, что получится, потому что, в конце концов, я хочу решить некоторые проблемы с памятью, которые StringBuilder решает некоторые из них, но не все. Итак, вот подкласс,
import java.lang.*;
public final class StringCon extends AbstractStringBuilder implements java.io.Serializable, CharSequence
{
public StringCon()
{
super( 16);
}
public StringCon( int capacity)
{
super( capacity);
}
public StringCon( String str)
{
super( str.length() + 16);
append( str);
}
public StringCon append( Object obj)
{
return append( String.valueOf( obj));
}
public StringCon append( String str)
{
super.append( str);
return this;
}
public StringCon delete( int start, int end)
{
super.delete( start, end);
return this;
}
public StringCon delete( int start)
{
super.delete( start, this.length());
return this;
}
public int indexOf( String str)
{
return indexOf( str, 0);
}
public int indexOf( String str, int fromIndex)
{
return String.indexOf( value, 0, count, str.toCharArray(), 0, str.length(), fromIndex);
}
public int hashCode()
{
int hash = 0;
int h = hash;
if( h == 0 && count > 0)
{
int off = 0;
char val[] = value;
int len = count;
for( int i = 0; i < len; i++)
h = 31*h + val[ off++];
hash = h;
}
return h;
}
}
Я реализую только те методы, которые собираюсь использовать. Вопросы таковы,
1) Компилятор не находит значение символов, количество и даже ключевое слово super. Эти символы определены в AbstarctStringBuilder, и StringBuilder использует их свободно. Почему?
2) Компилятор не может найти метод AbstractStringBuilder.substring(). Почему?
3) я получаю ошибку,
error: type argument StringCon is not within bounds of type-variable E
в заявлении
hth = ( j + 1 < al.size()) ? new Hashtable< StringCon, LinkedList< StringCon>>( al.get( j + 1).size(), 0.75F) : null;
4) получаю ошибку
error: method containsKey in class Hashtable<K,V> cannot be applied to given types;
if( hth.isEmpty() || !hth.containsKey( nextKey))
^
required: Object
found: StringCon
reason: actual argument StringCon cannot be converted to Object by method invocation conversion
where K,V are type-variables:
K extends Object declared in class Hashtable
V extends Object declared in class Hashtable
где nextKey — это объект StringCon.
Различные методы выше я скопировал из классов StringBuilder и String.
Что я не понимаю, где мои ошибки? Я использую все вышеперечисленное в контексте Hadoop, если это имеет какое-либо значение.
hth
? - person VGR   schedule 21.09.2013hth
. - person VGR   schedule 21.09.2013