У меня есть эта маленькая проблема, и я хочу, чтобы выяснить, whay это происходит со мной: Я сделал класс вроде этого:ява объявление класса с отключением метода общего типа возвращающегося другой общего типа
public class SomeSimpleClass {
//and I had method who returns generic. it can be instance of whatever, and for sure can be casted to U:
public <U>U giveMeSomething(String arg) {
return (U)SomewhereSomething.getValueCastingIsOK(arg);
}
}
и затем Я использую это так:
// give me some number:
Integer number = instanceSomeSimpleClass.giveMeSomething("I want integer value");
ИЛИ
String text = instanceSomeSimpleClass.giveMeSomething("I want text now");
и эв все в порядке. getValueCastingIsOK из SomewhereSomething возвращает мне то, что я хочу, и мне не нужно вводить тип в giveMeSomething. Похоже, U заменяется типом из ассоциативного переменной .. и все это круто ..
НО затем создать новый класс:
public class SomeOtherClass <T extends Something> {
//And I have the exactly same method here:
public <U>U giveMeSomething(String arg) {
return (U)SomewhereSomething.getValueCastingIsOK(arg);
}
}
и теперь, когда я хочу, чтобы использовать его в Точно так же компилятор (я использую Java 1.7) говорит мне, что мне нужно использовать typecast и начинаю использовать giveMeSomething, как это, потому что U теперь объект, и ничего больше ...
Integer number = (Integer)instanceSomeSimpleClass.giveMeSomething("I want integer value");
:(
Почему во втором случае компилятор не может получить тип U таким же образом, как в первом случае. И что я должен делать, чтобы так?
Поблагодарите в течение ответы, предложения ..;)
Да? Что такое 'U'? – SLaks
Извините, я забыл .. Объявление: public U giveMeSomething (String arg) – mmmika
Используете ли вы тип raw 'SomeOtherClass'? – rgettman