2010-12-17 2 views
1

On m'a donné ce code source et on m'a demandé de le compiler: il échoue avec l'erreur "types inconvertibles trouvés: int required: java.lang.Short".types inconvertibles trouvés: int requis: java.lang.Short

Le code effectue un décalage bit à bit pour convertir certaines valeurs hachées (je pense) en nombres entiers. Le compilateur échoue lors de la rencontre de cette instruction "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; 
.......... 

L'auteur original du code jure haut et bas qu'il a utilisé pour compiler mais ne peut pas m'aider. Je sais juste assez pour compiler une classe ou construire un paquet.

Notez que j'ai supprimé la requête SQL de cet extrait de code en raison de sa taille ... Une idée de ce qui pourrait être le problème?

Répondre

2

Définissez la valeur courte comme short, et non Short. Même si la méthode getShort() renvoie l'encapsuleur, ce sera autounboxed. (Et, en fait, pourquoi ne pas utiliser int?)

+0

Merci. 'short' au lieu de' Short' est tout ce qu'il a fallu. – Chris

2

Y a-t-il une raison d'utiliser un objet? Si vous avez utilisé une primitive courte au lieu de Short cela devrait fonctionner.

Questions connexes