简体   繁体   中英

Serious generics issue: int vs. Integer java

for a long while, i have been trying to get a piece of code to work, and it just is not possible. the class i have requires a generic which i have set to Integer. so i tried the follwoing:

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 will not allow this since java sees that int != Integer, even though both accept the same data. and because of the way generics works i cannot set ab; because of the primitiveness of the type int. Even casting to an Integer does not work, as it still throws the "type error"

finnaly, i have to ask if there is some sort of work around for this, or is it futile to try and get this to work?

You are trying to explicitly call a constructor as an instance method. This cannot be done in Java.

Perhaps you want:

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

However, since d is declared to be protected , that will only work if this code is in another class derived from a or in the same package.

Use

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

int can be explicitly converted to Integer with new Integer(10 ) or Integer.valueOf(10)

代码中并没有太大的意义: b是类型的对象a ,它不具有a方法-所以不知道你从什么期望ba(25) ; ......这有什么好做int VS Integer .. 。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM