严重的泛型问题:int vs. Integer java

时间:2012-10-11 18:57:30

标签: java generics types int

很长一段时间,我一直试图让一段代码工作,而这是不可能的。我所要求的类需要一个我设置为Integer的泛型。所以我尝试了下面的内容:

public class a<T> //set generics for this function
{
    private T A;
    protected boolean d;

    public a(final T A)
    {
        this.A = A;

        //do calculations
        //since constructor cannot return a value, pass to another function.
        this.d = retnData(Integer.parseInt(A.toString()) != 100); //convert to an integer, the backwards way.
    }
    private boolean retnData(boolean test)
    {
        return test;
    }
}
// IN ANOTHER CLASS
transient a<Integer> b;
boolean c = b.d = b.a(25); // throws an erorr: (Int) is not apporpriate for a<Integer>.a

Java不允许这样做,因为java看到int!= Integer,即使两者都接受相同的数据。并且由于仿制药的工作方式,我无法设置b;因为int类型的原始性。即使转换为Integer也不起作用,因为它仍会抛出“类型错误”

finnaly,我不得不问一下这方面是否有某种解决方法,或者试图让它发挥作用是徒劳的?

3 个答案:

答案 0 :(得分:4)

您正尝试将构造函数显式调用为实例方法。这不能用Java完成。

也许你想要:

transient a<Integer> b = new a<Integer>(25);
boolean c = b.d;

但是,由于d被声明为protected,因此仅当此代码位于从a派生的另一个类或同一个包中时才会有效。

答案 1 :(得分:2)

使用

final a<Integer> b = new a<Integer>(10); 
boolean c = b.d;

int可以使用new Integer(10)或Integer.valueOf(10)

显式转换为Integer

答案 2 :(得分:1)

代码没有多大意义:ba类型的对象,它没有a方法 - 因此不确定您对{{1}的期望}; ...这与b.a(25) vs int ...

无关