gpt4 book ai didi

java - 基于接口(interface)的类对象的类文字

转载 作者:行者123 更新时间:2023-12-01 10:51:57 24 4
gpt4 key购买 nike

乍一看,这似乎不可能,所以很高兴听到一些设计模式或解决方法来实现这项工作。

我需要提供一个带有类文字 Class<T> 的外部库为了让它找到正确的类型和注释并从 dynamodb 中提取。这是签名

public <T> T load(java.lang.Class<T> clazz, java.lang.Object hashKey)

但是,在我的应用程序中,所需的类类型是动态的,并且从接口(interface)动态解析。

这是一个示例,我从接口(interface)动态解析类的全名。

String dynamoDBTypeName = getDynamoDBClassName(someInterface);
Class<?> clazz = Class.forName(dynamoDBTypeName);

然后我需要将 clazz 转换为类文字,以便它可以传递给

mapper.load(SomeClazz.class, hashKey)

我找不到有关如何将类对象转换为类文字的解决方案,以便我可以将实际类型传递给库。有这样的吗?或者是否有更优雅的解决方案来动态解析类文字的接口(interface)?

最佳答案

如果我正确地解释了您的意图,那么您可以这样做:

String dynamoDBTypeName = getDynamoDBClassName(someInterface);
Class<?> clazz = Class.forName(dynamoDBTypeName);
Object loaded = mapper.load(clazz, hashKey);

无论您是从 Someclass.class 还是 Class.forName(...) 获取类,它都是同一个类对象。类型参数的值仅在编译时定义,因此传递给mapper.load的信息、实现mapper.load的代码或其返回的值绝对没有区别。

唯一的区别是,如果您传递 Class<X>到mapper.load(),那么编译器知道它将返回一个X,并且您可以将其分配给X类型的变量而无需进行强制转换。如果您通过 Class<?>编译器只知道它将返回一个对象。可以通过一些知道它应该是什么类型的代码将其转换为该类的实例。

关于java - 基于接口(interface)的类对象的类文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818338/

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