使用类对象作为泛型类型的java
我不完全确定如何问这个问题,这也是为什么我不确定标题等等。来吧
假设您有一个对象Foo foo = new Foo()
。是否可以编写类似new ArrayList<foo.getClass()>()
的代码,在运行时与new ArrayList<Foo>()
等效
另一个相关的问题是:假设类Foo
扩展了Exception
。那么有没有可能写出这样的东西
try{
// ...
} catch(foo.getClass() e) {
//
}
这将转化为
try{
// ...
} catch(Foo e) {
//
}
?
这样做是否可怕并不重要。不过,无论如何,我还是希望听到有保留的意见
# 1 楼答案
类型和它的类文本之间有一个微妙但存在的区别
类文本是一个为类型建模的对象。除此之外,它还提供了有关该类型实现的详细信息
引用对象时,使用类型。通用参数也是如此。它们在源代码中用类型表示
例如,在写作时
合法吗
事实并非如此
我希望这是有道理的
编辑:处理泛型时,通常的模式是将类作为参数传递
编辑2:根据@millimoose评论编辑
# 2 楼答案
不,这在Java语言规范中是不可能的。泛型参数纯粹是一种编译时类型的安全机制,所以在运行时定义它们是没有意义的
代码中的类文本不能与
Class<T>
对象互换,因为它们的角色本质不同。后者只有在运行时才有意义,并且可以动态变化# 3 楼答案
Java不支持这种语法,但如果您的目标是创建一个类型由实例类型决定的集合,请创建一个类型化方法,例如:
您传入的任何类型都将决定返回列表的类型。这不是一个运行时决定——这是一个编译时检查,但它最接近于我如何解释您的意图