java enum 返回list_java – 根据输入枚举值返回一个转换对象

我正在尝试创建一个采用Enum值的方法,并返回一个基于该Enum值转换为类的对象.例如,我有一个名为ComponentType的枚举:

public enum ComponentType

{

HEALTH(HealthComponent.class),

HUNGER(HungerComponent.class);

private Class extends Component> componentClass;

private ComponentType(Class extends Component> componentClass)

{

this.componentClass = componentClass;

}

public Class extends Component> getComponentClass()

{

return componentClass;

}

}

“HealthComponent”和“HungerComponent”是两个类,它们都扩展了一个名为“Component”的类.其中的内容对于这个问题并不重要.

实体将拥有一个他们被分配的组件列表(例如,一个实体可能有饥饿,而另一个可能有健康,另一个可能有两个).

我的目标是在Entity中创建一个方法,当传入ComponentType Enum中的值时,会返回一个Component对象,该对象被转换为该值的相应类类型.因此,如果您传入ComponentType.HEALTH,该方法将返回一个转换为HealthComponent的对象.这是我正在尝试的,但它不起作用:(编辑:见下文)

public T getComponentByType(ComponentType type)

{

Class extends Component> componentClass = type.getComponentClass();

for(Component component : componentList)

{

if(component.getClass() == componentClass)

{

return (T) componentClass.cast(component);

}

}

return null;

}

对于上面的方法,当传入ComponentType.HEALTH类型时:

entity.getComponentByType(ComponentType.HEALTH);

将返回一个转换为“Component”而不是“HealthComponent”的对象.我希望它返回一个转换为HealthComponent的对象,而不是Component.

有没有办法做到这一点?我觉得这应该是可能的.我试图找到一种方法来实现这一点的原因是因为它似乎在做所有这些演员:

HealthComponent component = (HealthComponent) entity.getComponentByType(ComponentType.HEALTH);

有点浪费,因为该方法可以(希望)假设我想通过传入的ComponentType来转换.

编辑(更多信息):

仔细看看结果,我注意到我的方法在上面 – 有效.我的意思是在Eclipse中,如果我输入:

component = entity.getComponentByType(ComponentType.HEALTH);

(组件变量尚未定义)然后将鼠标悬停在getComponentByType上以查看它返回的内容,它表示它正在返回< Component>零件

但是,如果我手动定义变量类型(大多数时候我只是让Eclipse为我创建变量),如下所示:

HealthComponent component = entity.getComponentByType(ComponentType.HEALTH);

然后将鼠标悬停在getComponentByType上以查看它返回的内容,它表示它正在返回< HealthComponent> HealthComponent,它确实编译和运行.所以它在技术上有效,但不是我喜欢的方式.这是一个小问题,因为如果我告诉Eclipse在第一个例子中为我创建一个局部变量,它将创建一个“Component”类型的变量,我必须手动更改.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的枚举类型可以通过以下步骤将其存储到MySQL中: 1. 在MySQL数据库中创建一个包含枚举常量的列,例如: ``` CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, enum_col ENUM('VALUE1', 'VALUE2', 'VALUE3'), PRIMARY KEY (id) ); ``` 2. 在Java中定义一个枚举类型,并添加一个字段来保存枚举常量的: ``` public enum ExampleEnum { VALUE1("VALUE1"), VALUE2("VALUE2"), VALUE3("VALUE3"); private final String value; ExampleEnum(String value) { this.value = value; } public String getValue() { return value; } } ``` 3. 在Java中使用JDBC将枚举类型转换为字符串类型,并将其保存到MySQL中: ``` // 获取数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/example_db", "username", "password"); // 准备SQL语句 String sql = "INSERT INTO example (enum_col) VALUES (?)"; PreparedStatement stmt = conn.prepareStatement(sql); // 将枚举类型转换为字符串类型 ExampleEnum exampleEnum = ExampleEnum.VALUE1; String enumValue = exampleEnum.getValue(); // 设置参数并执行SQL语句 stmt.setString(1, enumValue); stmt.executeUpdate(); ``` 4. 在Java中从MySQL中读取枚举类型,并将其转换Java中的枚举类型: ``` // 准备SQL语句 String sql = "SELECT enum_col FROM example WHERE id = ?"; PreparedStatement stmt = conn.prepareStatement(sql); // 设置参数并执行SQL语句 stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); // 读取结果集并将其转换Java中的枚举类型 if (rs.next()) { String enumValue = rs.getString("enum_col"); ExampleEnum exampleEnum = ExampleEnum.valueOf(enumValue); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值