Универсальный тип Java - нельзя использовать универсальный тип в качестве параметра

public class pencil<T> {
 private T []a;

 public pencil(T[] a) {
    this.a=(T[]) a;
 }
 public void pencil1() {
    for (int i = 0;i<a.length;i++) {
        if (a[i]== "pen") {
            System.out.println("pen");
            
        }
 }
}
 public class objQueue<T>  {
       private T[] queue;
       private int frontIndex;
       private int backIndex;

    
       @SuppressWarnings("unchecked")
       public objQueue() {
         T[] Queue1=(T[]) new Object[10];
         queue=Queue1;
         frontIndex=-1;
         backIndex=-1;
}


    
       public void enqueue(T newEntry) {
        if (isFull()) {
            System.out.println("Queue is full");
    }
        else {
        
           if (frontIndex== -1) {
        
              frontIndex=0;
        }
        backIndex =(backIndex+1)% queue.length;
    
        queue[backIndex]= newEntry;
 }
    
}


public class main { 
    static objQueue<Object> queue=new  objQueue<Object> ;

    static pencil pen=new pencil(queue); //it gives error that The constructor pencil(objQueue<Object>) is undefined 

    public static void main(String[] args) {
       queue.enqueue("pen")
       pen.pencil1();
}

эта часть выдает ошибку static Pen Pen = New Pen (очередь); // выдает ошибку, что конструктор Pencil (objQueue) не определен Как можно написать очередь, например, статическое перо карандаша = новый карандаш (очередь), не выдавая ошибок или идеи для правильного написания кода?

Этот вопрос действительно был бы лучше с хорошим форматированием

Yassin Hajaj 05.04.2021 21:32

У вас есть конструктор без аргументов и конструктор, который принимает массив. Почему вы ожидаете, что он знает, что делать, когда вы передаете единственный объект objQueue?

azurefrog 05.04.2021 21:34

Этот код подозрительный. Некоторые из этих операторов определенно не будут компилироваться из-за синтаксической ошибки. Также никогда не бывает хорошей идеей не следовать устоявшимся соглашениям об именах.

scottb 05.04.2021 21:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы запутались, потому что используете одно и то же имя queue для экземпляра и его свойства.

Единственный конструктор, который существует для pencil, имеет T[] в качестве параметра, который вы бы использовали следующим образом.

static objQueue<Object> queue = new objQueue<Object> ;
// You'll need to have a getter added for queue
static pencil pen=new pencil(queue.getQueue()); // or queue.queue

Кстати, вы также сделали бы свой код более встроенным в стандарты, если бы начали использовать camelcase для имен своих классов objQueue -> ObjQueue и pencil -> Pencil.

Другие вопросы по теме