В Дженериках Java существует ли Объединение?

Нет тега для этого. Необходимо было бы использовать JavaScript для показа текста.

Некоторые люди уже предложили использовать JS для динамичной установки видимого CSS. Вы могли также динамично генерировать текст с document.getElementById(id).innerHTML = "My Content" или динамично создание узлов, но взлом CSS является, вероятно, самым простым для чтения.

6
задан unj2 8 November 2009 в 19:08
поделиться

4 ответа

Краткий ответ? Нет. Вы можете (конечно) иметь Список из Объектов , но тогда вы можете поместить в него что угодно , а не только String или Целочисленные объекты.

Вы можете создать список объектов-контейнеров, и этот объект-контейнер будет содержать либо Integer , либо String (возможно, через дженерики). Еще немного хлопот.

public class Contained<T> {
   T getContained();
}

и реализуйте Содержимое и Содержимое .

Конечно, настоящий вопрос в том, почему вы хотите это сделать? Я ожидаю, что коллекция будет содержать объекты одного типа, а затем я могу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует доработки?

но тогда вы можете поместить в него что угодно , а не только объекты String или Integer .

Вы можете создать список объектов-контейнеров, и этот объект-контейнер будет содержать либо Integer , либо String (возможно, через дженерики). Еще немного хлопот.

public class Contained<T> {
   T getContained();
}

и реализуйте Содержимое и Содержимое .

Конечно, настоящий вопрос в том, почему вы хотите это сделать? Я ожидал, что коллекция будет содержать объекты одного типа, а затем я смогу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

но тогда вы можете поместить в него что угодно , а не только объекты String или Integer .

Вы можете создать список объектов-контейнеров, и этот объект-контейнер будет содержать либо Integer , либо String (возможно, через дженерики). Еще немного хлопот.

public class Contained<T> {
   T getContained();
}

и реализуйте Содержимое и Содержимое .

Конечно, настоящий вопрос в том, почему вы хотите это сделать? Я ожидаю, что коллекция будет содержать объекты одного типа, а затем я могу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

и этот контейнерный объект будет содержать либо Integer , либо String (возможно, через дженерики). Еще немного хлопот.

public class Contained<T> {
   T getContained();
}

и реализуйте Содержимое и Содержимое .

Конечно, настоящий вопрос в том, почему вы хотите это сделать? Я ожидал, что коллекция будет содержать объекты одного типа, а затем я смогу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

и этот контейнерный объект будет содержать либо Integer , либо String (возможно, через дженерики). Еще немного хлопот.

public class Contained<T> {
   T getContained();
}

и реализуйте Содержимое и Содержимое .

Конечно, настоящий вопрос в том, почему вы хотите это сделать? Я ожидал, что коллекция будет содержать объекты одного типа, а затем я смогу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

настоящий вопрос: зачем вы это хотите? Я ожидал, что коллекция будет содержать объекты одного типа, а затем я смогу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

настоящий вопрос: зачем вы это хотите? Я ожидаю, что коллекция будет содержать объекты одного типа, а затем я могу перебирать и выполнять действия с этими объектами, не беспокоясь о том, что они собой представляют. Возможно, ваша иерархия объектов требует дальнейшего изучения?

7
ответ дан 8 December 2019 в 17:23
поделиться

В дополнение к уже предоставленным красивым ответам ...


Возможно, у вас есть два типа данных в вашем алгоритме. Но вам, возможно, не придется помещать их в один и тот же список ...

Создание двух типизированных списков может быть более ясным для вашего алгоритма, вы все равно сохраните «типобезопасность» и будете переносить все свои данные. Далее следуют два образца кода, во втором два списка группируются в объекте MyData.

public class Algorithm1 {

  public void process(List<String> strings, List<Integer> integers) {
    ...
  }

}

--------------------------------------

public class DataPair {

  public List<String> strings;
  public List<Integer> integers;

}

public class Algorithm2 {

 public void process(DataPair dataPair) {
   ...
 }

}
2
ответ дан 8 December 2019 в 17:23
поделиться

Нет. Подумайте об этом так: с помощью дженериков вся идея заключается в обеспечении безопасности типов. Это было бы невозможно, если бы вы могли помещать в него объекты разных типов.

Вы можете использовать неуниверсальный java.util.List для своих целей.

Если вы хотите убедиться, что только объекты String или Integer входят в список, вы можете создать свою собственную реализацию List следующим образом:

public class MySpecialList {
   private List list= new LinkedList();
   ...
   public void add(final String string) {
       list.add(string);
   }

   public void add(final Integer integer) {
       list.add(integer);
   }
   ...
   // add rest of List style methods
}

Недостаток : вы теряете интерфейс List ясность ...

0
ответ дан 8 December 2019 в 17:23
поделиться

Нет. Однако у вас есть несколько альтернатив:

  • Вы можете использовать List и прятать все, что захотите; или

  • Вы можете использовать List и поместить свои данные в один из этих членов класса.

  • EDIT: Пример.

    class UnionHolder {
      public String stringValue;
      public int intValue;
    }
    
    List < UnionHolder > myList 
    ...
    

    Конечно, вам понадобится немного дополнительного кода, чтобы выяснить, какие данные нужно извлечь из объекта UnionHolder, который вы только что удалили из своего списка. Одна из возможностей состоит в том, чтобы иметь 3-й член, который имеет разные значения в зависимости от того, какой он есть, или вы могли бы, скажем, иметь функцию-член, такую ​​как

    public boolean isItAString() { return (this.stringValue != null }
    
    3
    ответ дан 8 December 2019 в 17:23
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: