webForumDet fria alternativet

Callable<Integer>

Java

5 svar · 355 visningar · startad av xtian

Medlem sedan nov. 200510 inlägg
Frågan#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;
}

}

Medlem 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...

Medlem 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

Medlem 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])

Medlem 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

Medlem 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.

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)