首先看起来看起来不太可能,所以听听一些设计模式或解决这个问题会很好。
我需要提供一个带有文字Class<T>
的外部库,以便它找到正确的类型和注释并从dynamodb中提取。这是签名
public <T> T load(java.lang.Class<T> clazz, java.lang.Object hashKey)
但是在我的应用程序中,所需的类类型是动态的,并且从接口动态解析。
以下是我从界面动态解析类的全名的示例。
String dynamoDBTypeName = getDynamoDBClassName(someInterface);
Class<?> clazz = Class.forName(dynamoDBTypeName);
然后我需要将clazz转换为类文字,以便将其传递给
mapper.load(SomeClazz.class, hashKey)
我找不到关于如何将类对象转换为类文字的解决方案,因此我可以将实际类型传递给lib。有这样的吗?或者是否有更优雅的解决方案动态解析类文字的接口?
答案 0 :(得分:1)
如果我正确地解释你的意图,那么你可以这样做:
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<?>
,编译器只知道它将返回一个Object。它可以通过一些知道它应该是什么类型的代码强制转换为类的实例。