gpt4 book ai didi

java - 从 int 到 class 的映射

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

我想根据用户输入创建不同类的对象,即用户将告诉要创建哪个类的对象。我有这样的东西:

launcher.addProcessor((Processor) new SerializedFieldProcessor(projectKey));

现在我有其他处理器,并希望用户提供整数输入,并根据该输入创建相应处理器的对象。一种简单的方法是使用 switch case,但稍后我将拥有超过 50 或 100 个独立的处理器。有没有办法用 map 或类似的东西来做到这一点?像这样的事情:

Map<int,Processor> mymap;
//initialize mymap;
int x= user_input;
launcher.addProcessor((Processor) new mymap[x]);

最佳答案

您可能需要考虑的另一个解决方案如下:

Map<Integer, Class<? extends Processor>> map = new HashMap<>();
// Integer.valueOf(x) used to prevent autoboxin just a matter of opinion.
map.put( Integer.valueOf( 0 ), MyProcessor.class );

Processor chosen = map.get( userIn ).getConstructor( String.class ).newInstance( projectKey );

launcher.addProcessor(chosen);

基本相同,不同的是返回的对象类型为Processor并且该类确实存在。当您使用字符串和 Class.forName(...) 时还有两个可能引发的额外异常。首先是ClassNotFoundException如果 Class.forName() 将被抛出方法未找到给定名称的类。第二个附加异常(exception)是 ClassCastException如果创建的对象不是 Processor 的实现或子类,则会抛出该异常.

<小时/>

说明:

我们正在使用带有 Integer 的 map 作为我们的 key 和 Class<? extends Processor>作为我们的值(value)。一个Class<T> object 可以被视为相应 .class 文件的对象表示(技术上不正确,但为了简单起见,我们假设是这样)。 <? extends Processor> 是什么意思?具体的意思是?这意味着该映射仅允许 Processor 的实现或子类型的类值。 。这样做消除了 ClassCastException 的线程因为如果我们只能存储扩展 Processor 的类,我们就只能检索可以转换为 Processor 的类。没有任何问题,甚至没有任何问题。

<小时/>

注意:我链接了实例化过程,这在生产环境中通常是一个坏主意,但它大大缩短了代码,并且无需进一步解释它,因为您使用完全相同的方法在你自己的答案中。

关于java - 从 int 到 class 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833580/

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