【发布时间】:2012-04-26 15:45:05
【问题描述】:
我有这门课,只是为了学习:
public class MyClass{ //Looking for a solution without making my class also generic <Type>
//Private Arraylist var to hold the value called myvar
public MyClass(ArrayList<MyDesiredType> incoming) {
//CODE myVar=incoming
}
public MyDesiredType getType() {
return myVar.get(0);
}
}
有没有什么方法可以在没有警告和强制转换和失去类型安全性的情况下从构造函数中推断传入对象到方法的返回类型,但最重要的是没有使整个类 GENERIC(对我来说似乎是多余的)?如果不是,为什么我认为这对编译器来说是不可行的?
这是我已经做过的重新表述的问题,但这是我的第一个问题,我学会了如何清楚地揭示它,因为没有人理解。我后来试图编辑原始问题,但一切都被埋没了。我更改并简化了示例并尝试使其简单。原问题:Java Generics Silly Thing (Why cant I infer the type?)。
如果有任何问题,请告诉我,我会删除它。
【问题讨论】:
-
看老问题和答案,似乎很清楚,你想做的事情是不可能的。真正的问题是:你为什么不想让
MyClass通用? -
嗯,我只看到一个答案谈到构造函数推断的不可能性,其中一半以上只谈到类中的泛型,而另一个我们都给出了关于推断的矛盾答案。我不想让 MyClass 通用,因为我想知道是否有一些创造性的方法可以从内部传递类型,并且因为我认为如果你已经有了指定类型来指定它来实例化类,这很烦人且不必要。而如果一个普通的方法可以推断,为什么构造函数不能做或者传递给私有变量呢?
-
实际上有一种情况在理论上是不可能推断出类型的,那就是
incoming是null。但是编译器无法知道它是否是null,因此这可能是为什么不允许以这种方式进行类型推断的一个实际参数。 -
但是使用普通的方法推断时没有问题,其实不是构造函数的问题,我的问题是试图达到并保留构造函数作用域外的类型,分析得很好由用户“101000”
-
这不是不可能的,我通过强制转换和@supresswarning 得到了它,但我认为它应该在编译器中实现
标签: java generics types constructor inference