Uniwersalna funkcja

0

Witam

Czy jest możliwość napisania funkcji w Javie , która będzie zwracać albo int, albo long, albo stringa bez możliwości późniejszego rzutowania ??
teraz mam coś takiego :


public enum EPropType{
STRING,
INT, 
LONG;
}

public <T> T check(String str, EPropType type)
{
switch(type){
case: INTEGER: return (T)(Integer) str;
case: STRING: return (T) str;
default:
return (T)str;
}
}



 

funkcja jest tylko przykładowa :
chodzi mi o to żebym później nie musiał rzutować czyli teraz mam :
int test = (Integer)check(str, EPropType.INTEGER);
a chciałbym mieć int test = check(str, EPropType.INTEGER);

czy jest taka możliwość ??

0

przeładuj funkcję

0
@SuppressWarnings("unchecked")
public <T> T check(String str, EPropType type) {
    return (T) str;
}

Musi działać. Ale nie wiem po co — i tak poleci ci wyjątek przy nieprawidłowym rzutowaniu. Funkcja wykonuje unchecked cast (dostaniesz ostrzeżenie kompilatora), stąd adnotacja SuppressWarnings.

To co masz źle u siebie to to, że Stringa rzutujesz na Integera, a powinieneś go skonwertować (metoda Integer.parseInt).
No i w enumie masz INT, a w case INTEGER.

Poza tym nie widzę zbytnio sensu istnienia tej metody: konwersja sterowana switchem z ominięciem statycznej kontroli typów? Jeśli chcesz mieć jakiś uniwersalny parser-konwerter, to zrób sobie do tego parametryzowany interfejs z odpowiednimi implementacjami, zamiast jakiegoś dziwnego enuma.

0 użytkowników online, w tym zalogowanych: 0, gości: 0