AbstractStringBuilder を拡張し、StringBuilder と同じクラスを取得したいのですが、String.hashCode() と同じ 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 のコンテキストで上記のすべてを使用しています。