Java 扩展AbstractStringBuilder并在哈希表中使用子类时出现的问题

Java 扩展AbstractStringBuilder并在哈希表中使用子类时出现的问题,java,inheritance,hashtable,super,Java,Inheritance,Hashtable,Super,我想扩展AbstractStringBuilder并获得一个与StringBuilder相同的类,但拥有一个与String.hashCode()相同的hashCode()方法。目的是将这个新的子类用作哈希表中的键。我想用Hashtable和这个新的子类进行实验,看看会发生什么,因为最后我想解决一些内存问题,StringBuilder解决了其中的一些问题,但不是全部。下面是子类 import java.lang.*; public final class StringCon extends Ab

我想扩展AbstractStringBuilder并获得一个与StringBuilder相同的类,但拥有一个与String.hashCode()相同的hashCode()方法。目的是将这个新的子类用作哈希表中的键。我想用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;
    }
}
在一份声明中

hth = ( j + 1 < al.size()) ? new Hashtable< StringCon, LinkedList< StringCon>>( al.get( j + 1).size(), 0.75F) : null; 
hth=(j+1>(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
错误:类哈希表中的containsKey方法无法应用于给定类型;
if(hth.isEmpty()| |!hth.containsKey(nextKey))
^
必需:对象
发现:StringCon
原因:无法通过方法调用转换将实际参数StringCon转换为对象
其中K,V是类型变量:
扩展类哈希表中声明的对象
V扩展类哈希表中声明的对象
其中nextKey是StringCon对象

我从StringBuilder和String类中复制了上面的各种方法


我不明白的是什么,我的错误在哪里?我在Hadoop的上下文中使用上述所有内容,如果这有任何重要性的话。

java.lang.AbstractStringBuilder
不是
公共的
,因此它只能由
java.lang
中的其他类扩展。尝试编译代码会出现第一个错误:

StringCon.java:3: java.lang.AbstractStringBuilder is not public in java.lang;
cannot be accessed from outside package
通常不建议将可变类用作哈希表中的键()。可能有更好的方法来解决您的问题:

因为最后我想解决一些内存问题,StringBuilder解决了其中一些问题,但不是所有问题


考虑直接询问内存问题。

什么是
hth
的完整类型?请显示
hth
变量/字段第一次声明的行。直接从代码开始,Hashtable>hth=null;hth=新哈希表>(某种大小,0.75F);在这里,某个大小在一次又一次的迭代中发生变化。非常感谢!我考虑过直接询问内存问题:)您的回答也是一个很好的教训,让我们首先查看整个编译器输出,而不是其中的一部分。
StringCon.java:3: java.lang.AbstractStringBuilder is not public in java.lang;
cannot be accessed from outside package