2010-12-17 8 views
1

Ich wurde diesen Quellcode gegeben und aufgefordert, es zu kompilieren: es schlägt mit dem Fehler "inconvertible Typen gefunden: int erforderlich: java.lang.Short".inconvertible Typen gefunden: int erforderlich: java.lang.Short

Der Code tut eine bitweise Verschiebung, um einige Hashwerte (ich denke) in Ganzzahl zu konvertieren. Der Compiler schlägt fehl, wenn diese Anweisung "s >>> = 5;"

... try {... 

    // Query data 
    SelectQuery = "select " 
    + "... " 
    + "from " 
    + "subscrib a, " 
    + "account b " 
    +"where " 
    +"a.cardid>0 " 
    + "and " 
    + "b.camc_card_id>0 " 
    + "and " 
    + "a.cardid=b.camc_card_id " 
    +"and " 
    + "a.cardid >= ? and a.cardid <= ?"; 

    CApStmt = CAconn.prepareStatement(SelectQuery); 
    // We set the card id ranges 
    CApStmt.setLong(1, mincardversion[0]); 
    CApStmt.setLong(2, maxcardversion[0]); 

    CArs = CApStmt.executeQuery(); 

    while (CArs.next()) { 
    // We retrieve all columns from source table 
    long SUBID = CArs.getLong(1); 
    Date NEWCARDDATE = CArs.getDate(2); 
    int CSSNUMBER = CArs.getInt(3); 
    String ZIPCODE = CArs.getString(4); 
    int SUBREGIONS = CArs.getBinaryStream(5).read(); 
    int CALLBACKDAY = CArs.getBinaryStream(6).read(); 

    /* 
     * This field contains two-byte bitmap with the following 
     * format: Bits 15-11 : Hour <- Bits 10-5 : Minutes <- Bits 
     * 4-0 : Seconds/2 
     */ 
    Short s = CArs.getShort(7); 

    /* Bits 0-4 : Seconds (bitwise AND operation) */ 
    int secs = s & 0x1F; 
    int seconds = secs/2; 

    /* Bits 5-10 : Minutes (bitwise AND operation) */ 
    s >>>= 5; 
    int min = s & 0x1F; 
    int minutes = min * 60; 
.......... 

Der ursprüngliche Autor des Codes schwört auf und ab, dass es kompiliert hat, kann mir aber nicht helfen. Ich kenne gerade genug, um eine Klasse zu kompilieren oder ein Paket zu bauen.

Beachten Sie, dass ich die SQL-Abfrage aus diesem Code-Snippet aufgrund seiner Größe entfernt ... Jede Idee, was könnte das Problem sein?

Antwort

2

Definieren Sie den Kurzwert als short, nicht Short. Auch wenn die Methode getShort() den Wrapper zurückgibt, wird es autounboxed sein. (Und warum nicht int?)

+0

Vielen Dank. "Kurz" statt "Kurz" ist alles, was es brauchte. – Chris

2

Gibt es einen Grund, ein Objekt zu benutzen? Wenn Sie ein primitiv short anstelle von Short verwenden, sollte es funktionieren.

Verwandte Themen