webForumDet fria alternativet

Callable<Integer>

5 svar · 355 visningar · startad av xtian

xtianMedlem sedan nov. 200510 inlägg
#1

Hej,

Ska skapa ett program som använder sig av trådar och tänkte då använda javas nya sätt att implementera trådar som utnyttjar Callableinterfacet. Mitt problem uppstår vid klassdeklarationen på första raden där jag implementerar Callable<Integer>. Det kompilatorn inte verkar gilla är just <Integer>. Det felmeddelande jag får är:

"Syntax error on tokens, delete these tokens"

Ett annat problem är när jag försöker göra en unboxing, dvs tilldela ett Integervädrde till en int som också ska finnas i den nya javaversionen. Där får jag felmeddelandet:

"Type mismatch: cannot convert from integer to int"

Någon som vet vad dessa fel beror på? Kan nämna att jag använder mig av Eclipse 3.0 och JRE 1.5.

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> <--- fel1 "Syntax error on tokens, delete these tokens"
{
private int test;

public MyCallable( Integer n )
{
	test = n; **\<-- fel2 "Type mismatch: cannot convert from integer to int"**
}

public Integer call() 	
        {
	return test;
}

}

LimeMedlem sedan sep. 2001961 inlägg
#2

Felet ligger i att int test är en atomär och n är ett objekt av typen Integer.

Använd
test = n.intValue

eller deklarera även test som Integer.

Sedan kommer du att få fel på return test också eftersom den inte är av typen Integer...

xtianMedlem sedan nov. 200510 inlägg
#3

Lime skrev:

Felet ligger i att int test är en atomär och n är ett objekt av typen Integer.

Använd
test = n.intValue

eller deklarera även test som Integer.

Sedan kommer du att få fel på return test också eftersom den inte är av typen Integer...

Jag förstår vad du menar och problem2 löses antagligen enklast så. Men enligt länken nedan så ska det i version 1.5 av java gå att göra en automatisk unboxing, dvs att tilldela en variabel av typ int till en annan variabel av typ Integer. Eller har jag missuppfattat något?

http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter03/autobox.html

LimeMedlem sedan sep. 2001961 inlägg
#4

Du har helt rätt... men det är fult... och inneffektivt.

Om du kör Eclipse, har du ställt den så att den verkligen använder 1.5 och inte kompilerar i 1.4-kompatibel kod? (Window->Preferences/Java/Compiler [->Compiler compliance level = 5.0])

xtianMedlem sedan nov. 200510 inlägg
#5

Tack för ditt påpekande. Kollade inteställningarna och såg ju givetvis att du hade helt rätt också. Den stod inställd på 1.4, tyvärr fanns 1.5 inte att välja, antar att det beror på att det inte är installerat då.

Mvh
xtian

LimeMedlem sedan sep. 2001961 inlägg
#6

Stämmer obehagligt det med. Eclipse 3.0 har inte stöd för Java 5 så du får uppdatera till 3.1. Det är iofs inte helt otrevligt eftersom det är klara prestandaförbättringar mellan 3.0 och 3.1.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)