我制作了一个非常简单的泛型类,它存储 2 个相同类型的变量,如下所示:
public MyClass<T>
{
private T v1;
private T v2;
public MyClass(T v1, T v2)
{
this.v1 = v1;
this.v2 = v2;
{
}
现在我需要通过另一个非泛型类实现一种方法,该方法将不同类型的对象列表作为输入,并给出 MyClass<T>
的列表作为输出。与相同类型的情侣。
我的问题是,在不知道我正在使用什么类型的情况下,我无法找到一种方法来制作这样的东西,如何实例化正确的 MyClass
类型每次?
我已经走到这一步了,没有从 eclipse 中得到错误
public List<MyClass<?>> match()
{
List<MyClass<?>> list = new ArrayList<MyClass<?>>();
for(Object obj : this.list)//not the same list it's a parameter of the
{ //non-generic class
for(Object obj2 : this.list)
{
if(!(obj == obj2)&&obj.getClass().equals(obj2.getClass()))
{
MyClass<Object> couple = new MyClass<Object>(obj, obj2);
insertCouple(couple, list);
}
}
}
insertCouple
是一个私有(private)方法,用于检查这对夫妇是否已经在输出列表中,我尝试实现 Comparable
上MyClass
但使编码变得更加复杂。
正如你所看到的,我被迫保持通用,但我可以看到它存在问题。 如果没有一种方法可以在运行时查找并填充特定类型,我该如何编写它才能通过泛型实现?
最佳答案
您无法决定在运行时创建哪种类型的 MyClass 对象(取决于匹配对象的类),因为所有泛型类型都会在编译时被删除。您可以在以下位置阅读有关类型删除的更多信息:
http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
关于java - 按类型参数对泛型类的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16712763/