我有一个类型
IDType<IDDataType>
和另一类
SelectionManager<IDDataType>
有没有办法通过传递第一个类的实例来推断第二类对象的数据类型?像这样的东西
IDType<String> idType = new IDType<String>();
SelectionManager<idType.getGenericType()> selectionManager = new Se.....
当然,我想这样做的原因是idType(String就是这里的一个例子)是在完全不相关的地方创建的。
答案 0 :(得分:0)
您可以在每种方法中声明额外的泛型。
public <T> void method() {
IDType<T> idType = new IDType<T>();
SelectionManager<T> selectionManager = new SelectionManager<T>();
答案 1 :(得分:0)
在java中没有优雅的方法可以执行以下操作:
IDType<String> idType = new IDType<String>();
idType.getGenericType();
这是因为Java编译器在运行时不知道对象的类型。阅读维基百科页面“Generics in Java”上关于“类型擦除”的部分。 Java最初并不是设计用于这些。
你可以随时使用一些肮脏的黑客... instanceof可以完成这项工作,但那是丑陋的编程。
答案 2 :(得分:0)
您编写示例时,您的问题有点难以理解,因为您希望有人调用您的代码来定义类型,但这不是您编写示例的方式。
由于代码目前您可以将其设置为非泛型,因此在编译时您的代码具有所有类型信息。
为了您的示例,必须有一个代码片段A(由其他人编写),其中定义了IDType,然后传递给您编写的代码(代码段B):
IDType<String> idType = new IDType<String>();
YourClass.yourMethod(idType);
Snippet B(您的代码)看起来像这样:
public <T> void yourMethod(IDType<T> idType){
SelectionManager<T> selectionManager = new SelectionManager<T>();
}
这意味着selectionManager将具有与idType相同的genericType。
希望这是有道理的!