gpt4 book ai didi

java - 从存储在 HashMap 中的类创建新实例

转载 作者:行者123 更新时间:2023-12-02 05:41:15 27 4
gpt4 key购买 nike

我遇到了从 HashMap 中存储的类创建新实例的问题。

我正在做:将类的实例保存到 HashMap ,作为通过 UIN(唯一项名称)((这是一个字符串))加载类的引用

问题:保存的实例保持不变,导致为每个保存的 block 放置相同的实例,这导致加载保存时仅替换一个 block 。

寻找:我如何创建一个新实例,以便我可以将所有 block 正确放回原处?

代码:

注册:

/*======================Registry===========================*/
public static HashMap<String, Block> registeredBlocks = new HashMap<String, Block>();

public static void registerBlock(Block block){
registeredBlocks.put(block.getUIN(), block);
}

public static void loadBlocks(){
registerBlock(new BlockChest());
registerBlock(new BlockTree());

System.out.println(registeredBlocks);
System.out.println(registeredBlocks.containsKey("chestBlock"));
System.out.println(registeredBlocks.get("chestBlock"));
System.out.println(Blocks.chest);
}

public static Block getBlockFromUIN(String uin){
if(registeredBlocks.containsKey(uin)){
return registeredBlocks.get(uin);
}
return null;
}

引用

public static BlockChest chest = (BlockChest)Block.registeredBlocks.get("chestBlock");
public static BlockTree log = (BlockTree)Block.registeredBlocks.get("treeLog");

最佳答案

您没有在 HashMap 中存储类:

HashMap<String, Block> registeredBlocks

这是将字符串映射到 Block 实例,因此是您正在观察的行为。

相反:

HashMap<String, Class> registeredBlocks

将存储Class对象

registeredBlocks.put(block.getUIN(), block.getClass());  //or Block.class

将使用任何键字符串将 Block 类放入您的 map ,并且

Block b = (Block)registeredBlocks.get(keyString).newInstance(); 

将为您提供该类的一个新实例,并强制转换为Block

注 1:这是利用 Class.newInstance()方法。

注2:这纯粹是为了回答您的问题。您想要做的事情在您的帖子中并不立即显而易见,但我相当有信心有一种更干净/更好的方法来实现您想要实现的目标。

关于java - 从存储在 HashMap 中的类创建新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com