Просто играя с дженериками и т. Д. На Java, столкнулась с потенциальной проблемой. Вот упрощенная версия того, что я думалМассив дженериков в Java, обеспечить, чтобы все были одного типа?
public class Test<T> {
private T[] arrayOfGenerics;
int top;
public Test(int size) {
arrayOfGenerics = (T[]) new Object[size];
top = 0;
}
public void add(T toAdd) {
arrayOfGenerics[top++] = toAdd;
}
public static void main(String[] args) {
Test myTest = new Test(10);
myTest.add("Some String"); //First value added is a String
myTest.add(12); //Way to make this NOT work, since myTest should only accept Strings now
}
}
Очевидно, что это не имеет особого смысла, производство мудрый, но я думал, для более сложных структур данных, где вы хотели бы иметь гибкость дженериков, но по-прежнему обеспечивать все они должны быть одного типа. Который является ужасным способом объяснить это, но, вернувшись к приведенному выше примеру кода, будет ли способ сделать так, чтобы, когда кто-то создал экземпляр и экземпляр Test, они должны были указать тип arrayOfGenerics
и застрять с ним , либо через конструктор, либо, возможно, только на основе первого типа значения, которое добавлено?
Другой способ объяснить это, скажем, вы реализуете свою собственную структуру данных Stack или LinkedList. Вы хотите, чтобы это был стек всего одного и того же объекта. Это могут быть строки, целые числа, что угодно, но нужно «выбрать» и придерживаться его.
Вы в настоящее время используют [необработанный тип] (https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html). Попробуйте 'Test test = new Test <>();' –