gpt4 book ai didi

java - 有没有办法使用字符串来转换为类型

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

我有一个字符串告诉我要将对象转换为什么,有没有办法转换为该对象?

这是一些伪代码,定义了我想要做的事情


public TypeToCastTo Cast(T object, String TypeToCastTo) {
switch (TypeToCastTo) {
case "foo":
return (foo)T;
case "otherType":
return (otherType)T;
...
}
}

编辑
我想创建一个游戏,我可以点击一个按钮来购买一些东西,例如继承自 worldObject 的剑或盔甲。我想,因为我可能会返回一个武器或盔甲类(它们都继承自 worldObject),所以返回一个 worldObject 然后向下转换为正确的类(基于它的名称(字符串))是有意义的。

编辑2:正如评论中提到的,这是一个 XY 问题。我最初试图创建一个返回向下类型的函数,但实际上这没有意义,因为在其他地方使用它的情况下,我将需要一个 switch 语句来确定如何处理该对象(此时我可以转换)所以而不是

public TypeToCastTo Cast(T object, String TypeToCastTo) {
switch (TypeToCastTo) {
case "foo":
return (foo)T;
...
}
}

使用我的函数来转换 WorldObject,我可以拥有

Method DoingSomethingWithWorldObject(WorldObject T) {
switch(T.typeToCastTo) {
case "foo":
foo temp = (foo)T;
// code using temp
case "other":
other temp = (other)T;
// code using temp
...
}
}

尽管有几个人提到我的想法可能是错误的,包括我标记为正确的答案(尽管我问了错误的问题,但它回答了我的问题),我真正理解这一点的原因是因为已删除的回复。

最佳答案

正如评论中提到的,您可以通过使用反射和 Class.cast 方法来做到这一点:

public Object cast(Object object, String typeToCastTo) {
switch (typeToCastTo) {
case "foo":
return Foo.class.cast(object);
case "otherType":
return OtherType.class.cast(object);
}
}

但是,该方法的返回类型必须是 Object,因为您不知道 typeToCastTo 参数中编码的实际返回类型。

如果您手头有一个 Class 实例,那么它至少有意义:

Class<Foo> fooClass = (Class<Foo>) Thread.currentThread().getContextClassLoader().loadClass("my.foo.Foo");
Foo fooObject = foo.cast(object);

但这一切似乎毫无意义......

基于评论。要调用父类的私有(private)方法,您不需要强制转换:

Object object = new SubFoo();
Method privateFooMethod = Arrays.asList(ParentFoo.class.getDeclaredMethods())
.stream().filter(m -> m.getName().equals("privateFooMethod")).findAny()
.get();
privateFooMethod.setAccessible(true);
privateFooMethod.invoke(object);

但是在使用反射来实现这样的事情之前你真的应该三思而后行。这看起来像是一个糟糕的类/接口(interface)设计,导致为相当基本的需求提供了奇怪的解决方案。

关于java - 有没有办法使用字符串来转换为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58694403/

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