当前位置: 首页 > 面试题库 >

具有相关类型的通用键/值的通用映射

吴英武
2023-03-14
问题内容

我正在尝试创建一个通用类型,该通用类型保留已创建的自身版本的地图以供以后使用。实际上,这是一种单例模式,其中每种类型都有一个实例。到目前为止,我的代码是:

public class FieldBinder<T> {
    static final Map<Class<? extends Object>,FieldBinder<? extends Object>> instanceMap = 
        new HashMap<Class<? extends Object>,FieldBinder<? extends Object>>();

    private FieldBinder() {}

    synchronized public static <V extends Object> FieldBinder<V> getInstance(Class<V> klass) {
        if(!instanceMap.containsKey(klass)) {
            instanceMap.put(klass, new FieldBinder<V>());
        }
        return (FieldBinder<V>)instanceMap.get(klass);
    }
}

但是,我仍然不确定我是否“做对了”。感觉我应该能够指定该集合为(类-> FieldBinder)。IDE警告有关return语句的事实只会加强这种想法。

有没有更好的方法来解决这个问题?

注意:这个问题似乎密切相关,但是距离足够远,我无法弄清楚如何将信息应用于我自己的问题。


问题答案:

您的实现是正确的。没有做到这一点的“更好”方法(如果代码中存在这样的事情,则是“更好”,这是另一个问题。)

次要修复:

  • <V extends Object>等效于V不那么冗长
  • Class<? extends Object>等效于Class<?>不那么冗长
  • 您可以使用@SuppressWarnings("unchecked")注释来告诉编译器强制转换是安全


 类似资料:
  • 问题内容: 这是hrert的问题Generic类与其他类型的Collectiongetter的后续文章。如果您可以为我的问题找到更好的标题,请随时对其进行编辑: 下面的代码包含一个具有返回类型方法的通用类和具有返回类型方法的另一个方法,显然与。 现在,如果我实例化一个原始数据(我永远不会做,所以这个问题更多是一个理论问题,以帮助理解正在发生的事情),那么在增强的for循环中调用该方法将不起作用,因

  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个

  • 我试图用Java中的一个通用返回类型来实现< code >命令模式。 在SO上查看了这个答案后,我创建了一个类(接口),如下所示: 然而,Eclipse一直抱怨: SearchResultsPage 类型的方法 execute(ArrayList, T) 必须重写或实现超类型方法 但当我点击 在超类型命令中创建 execute() Eclipse自动生成方法<code>T execute(Arra

  • 问题内容: 假设我有一个超类,它定义了以下抽象方法 现在,如果我想在某些子类中覆盖它 我收到有关类型安全和未经检查的转换的警告: 类型安全:返回类型为从类型需要选中转换,以符合从类型 没有下摔倒,如果?有什么办法可以适当消除警告吗? 问题答案: 重写方法的返回类型必须是重写方法的返回类型的子类型。 不是where 的子类型。T在这里未知。 是每个子类型化规则的的子类型。 有关通配符的一些子类型化规

  • 问题内容: 抱歉,标题似乎令人困惑,但请按示例进行操作。 假设我有一些带有通用类型参数的Java类: 我可以创建一个类型为存储对象的变量,并将通用参数设置为。Java还允许我将该变量分配给另一个变量,但将通用参数设置为通配符类型: 但是,在使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则无法将该类的对象分配给相同类型/泛型的类型,后者(内部/嵌套)参数是通配符类型: 具体的编译错误是: 凭

  • 问题内容: 我必须完成一个奇怪的特殊情况。其描述如下: 我必须设计一个地图,其中“ 键 ”始终为 字符串 类型。但是,其中一个键的“ 值 ”可以是 字符串或列表 (取决于特定键可以具有的值数。如果该特定键只有一个值,并且必须如果键包含许多值,则为列表)。如何完成这种情况? 例如:在映射中有2个键,分别是“名称”和“电话号码”。一个人只能有一个名字和多个电话号码。因此,此处的第一个键(即“名称”)的