| 

.NET C# Java Javascript Exception

6
ICh habe findBugs installiert und kriege an der einen stell den Fehler
Bug: Unchecked/unconfirmed cast from LanCfg to DualLanCfg of return value in ....


jedoch erbt DualLanCfg von LanCfg
public class DualLanCfg extends LanCfg {


also dürfte das doch eigentlich kein Problem sein zu casten oder?
jedoch wenn ich dies aufrufe, meckert findBugs

DualLanCfg dualLanCfg = (DualLanCfg) cfg.getLanCfg();


also eigentlich ist das doch überhaupt kein problem oder?


ich weiß ich könnte das problem lösen in dem ich sage
DualLanCfg dualLanCfg;
if(cfg.getLanCfg() instanceOf DualLanCfg)
dualLanCfg = (DualLanCfg) cfg.getLanCfg();


dann müsste ich aber ebenfalls noch eine if anweisung um mein restlichen code packen, falls dualLanCfg null ist., also
if(dualLanCfg != null){
//restlicher code
}


und das bringt mir ja kein mehrwert odeR?

also eigentlich kannn ich das soch casten, wenn das von dem typen erbt oder?

[Edit Xantiva: +Java bei den Tags]
26.02.2014
tanzverfuehrung 147 1 8
3 Antworten
2
also dürfte das doch eigentlich kein Problem sein zu casten oder?

Doch, es ist ein Problem.

getLanCfg() liefert Dir eine Instanz von LanCfg. Irgendeine. Es könnte direkt eine LanCfg-Instanz sein (falls LanCfg nicht abstrakt ist), oder die Instanz einer beliebigen anderen, von LanCfg abgeleiteten Klasse, z.B. SingleLanCfg (hypothetisch). Und wenn es aber irgendwas anderes ist als DualLanCfg, gibt es eine Cast-Exception. Nur mit Blick auf die Signatur der Methode kannst Du Dir überhaupt nicht sicher sein, dass Du eine DualLanCfg bekommst, und deshalb warnt Dich FindBugs.
26.02.2014
Matthias Hlawatsch 13,2k 4 9
2
Wieso ist das "kein Problem" zu casten?
Wenn cgf.getLanCfg eine LanCfg Instanz zurückliefert, knallt es ...

Ich würde ein ILanCfg Interface erstellen, das von LanCfg implementiert wird. Dann liefert getLanCfg immer eine Instanz mit dem Interface zurück und Du kannst mit "as" versuchen daraus wieder eine DualLanCfg zu machen ...

ILanCfg lanCfg = cfg.getLanCfg();
DualLanCfg dualLanCfg = lanCfg as DualLanCfg;
if (dualLanCfg == null) throw new Exception ...
26.02.2014
Xantiva 2,3k 2 9
Oops, ich habe das "extends" überlesen und nur an .NET gedacht ...
Denk mal bitte dran, die Sprache bei den Tags mit anzugeben!
Xantiva 26.02.2014
as gibt es in java garnicht!oder täusche ich mich?
tanzverfuehrung 26.02.2014
1
Bin zwar kein Java Profi, aber probier mal Folgendes:

LanCfg lanCfg = new cfg.getLanCfg();

DualLanCfg dualLanCfg = new DualLanCfg(lanCfg);
--Oder--
DualLanCfg dualLanCfg = (DualLanCfg)lanCfg;
26.02.2014
DerPunk 1,2k 1 7

Stelle deine Java-Frage jetzt!