2017-02-02 1 views
2

Нельзя добавить к этому s1 значение, отличное от нуля? (И безопасно назначены температуры)Является ли S расширяет ArrayList из S полезной конструкцией на языке или просто побочным эффектом грамматики

ли

<S extends ArrayList<S>> 

полезная конструкция в языке или только грамматического побочный эффект? Правильно ли я интерпретирую S как ArrayList, который может содержать только объекты, которые являются ArrayLists из ArrayLists из ArrayLists и т. Д.?

public class Foo{ 
    public static <S extends ArrayList<S>> void f1() { 
     S s1 = (S) new ArrayList<S>(); 

     // s1.add(????); // can anything be added here other than null? 
     S temp = s1.get(0); 
    } 
} 
+1

[проблема XY] (возможно, http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? –

+0

Вы сказали Java, что S является подклассом ArrayList здесь: '>' – Jason

+0

Не просите что-то, на что я знаю ответ, если это то, что вы имеете в виду. Null - это все, что я нашел, что работает до сих пор. И я знаю, что я сказал Java, что такое S. Я имею в виду, кто технически поставляет этот параметр, так как main не называется явно. –

ответ

3

Вы можете только добавить s1 и null к нему без литья s1 или литья других объектов S:

s1.add(s1); 
s1.add(s1.get(0)); 

Вы не знаете никаких других объектов в объеме, которые выполняют S extends ArrayList<S> ограничения в качестве параметра типа S объявляется только в этой области. Именно поэтому считается неправильной практикой определять параметр универсального типа для метода в случае, если вы не используете его более чем в одном месте в сигнатуре метода.

+0

Интересно. Является ли это S расширяет ArrayList конструкцией, полезной каким-либо образом или просто влияет на грамматику? –

+1

@ user889742 Есть варианты использования - не с коллекциями, обычно - больше вещей, подобных обсуждаемым в этом вопросе - [Что означает > означает в Java?] (Http://stackoverflow.com/q/18892061/2513200) – Hulk

+0

Хороший вопрос о литье тоже. Я укажу его в вопросе. Очевидно, что вы можете добавить что-нибудь к нему, поставив его в исходный код ArrayList. –

Смежные вопросы