Я думаю, вы путаете автобокс с выводом типа.
Вывод типа - это когда компилятор может определить, какой тип он должен использовать в универсальном методе самостоятельно, на основе переменных, используемых при вызове метода.
Например, если у вас есть следующий метод:
public <T extends SomeClass> T process(T obj) {
// call some methods of SomeClass on obj to process it here
return obj;
}
а затем назовите это так:
SomeChildClass a = new SomeChildClass(); // SomeChildClass extends SomeClass
a = process(a);
предполагаемый тип будет SomeChildClass;
Тип может быть выведен из параметров или из возвращаемого типа, как в вашем примере. Но компилятору не всегда очевидно, какой тип он должен использовать. Если это произойдет, вы можете принудительно установить тип, используя метод this.<Double>getAnything(int flag)
, который вы описали. Обычно это происходит в таких ситуациях:
public <T> List<T> getSomeList() {
// implementation
}
public void processList(List<SomeClass> list) {
// implementation
}
и звонит
processList(getSomeList()); // compiler error: cannot convert List<Object> to List<SomeClass>
В таких случаях вам может потребоваться принудительно указать параметр типа.
При всем этом, пожалуйста, примите во внимание все, что сказано в polygenelubricants, так как он делает несколько очень хороших замечаний относительно вашего кода и объясняет, что такое автобоксинг (это связано с примитивными классами-оболочками, такими как Integer для int и Double для double).
person
Andrei Fierbinteanu
schedule
19.07.2010
new String("hello")
в Java. Просто напишите"hello"
- это ужеString
объект. Нет необходимости создавать ещеString
объект. - person Jesper   schedule 10.07.2010