Конструктор type неприменим, поскольку формальный тип элемента varargs здесь недоступен

#java

#java

Вопрос:

Я не понимаю, почему этот код не компилируется

Похоже, что он не распознает «Nombre» как «Выражение». Проблема в том, что «Nombre» реализует «Выражение» (которое является интерфейсом). Есть ли у вас какие-либо идеи, откуда может возникнуть проблема?

Вот где это вызывает ошибку компиляции:

 private static void testMoyenneToString(){        

        Moyenne s = new Moyenne(new Nombre(10), new Nombre(10)); 
        assert(s.toString().equals("(10*10)")); 

        s = new Moyenne(new Nombre(10), new Nombre(-10)); 
        assert(s.toString().equals("(10*(-10))")); 
    }
  

Это Moyenne .java :

 package calc;

public class Moyenne extends Naire {
    public Moyenne(Expression... operandes) {
        super(operandes);
    }

    public int valeur() {
        int somme = 0; 
        for (Expression e : super.operandes) {
            somme  = e.valeur(); 
        }
        return somme/super.operandes.length; 
    }

    public String getOperateur() {
        return "Moyenne" ;
    }
}
  

это Nombre.java :

 package calc;

public class Nombre implements Expression {
    protected int val; 

    public Nombre(int val) {
        this.val = val; 
    }

    public int valeur(){
        return this.val; 
    }

    public String toString(){
        return Integer.toString(this.val);  
    }
}
  

Это выражение.java (интерфейс) :

 package calc;

interface Expression {
    int valeur(); 
    String toString(); 
}
  

Это ошибка, которую я получаю при компиляции :

 javac -encoding "iso-8859-1" calc/tests/TestExpression.java
calc/tests/TestExpression.java:164: error: constructor Moyenne in class Moyenne cannot be applied to given types;
        Moyenne s = new Moyenne(new Nombre(10), new Nombre(10)); 
                    ^
  required: Expression[]
  found: Nombre,Nombre
  reason: formal varargs element type Expression is not accessible from class TestExpression
calc/tests/TestExpression.java:167: error: constructor Moyenne in class Moyenne cannot be applied to given types;
        s = new Moyenne(new Nombre(10), new Nombre(-10)); 
            ^
  required: Expression[]
  found: Nombre,Nombre
  reason: formal varargs element type Expression is not accessible from class TestExpression
2 errors
  

Это моя диаграмма UML, которая поможет вам понять общую организацию здесь : введите описание изображения здесь

Комментарии:

1. Интерфейс Expression не public является?

2. это общедоступно, да

3. Не в соответствии с исходным кодом, который вы добавили к своему вопросу.

4. Хорошо, это было закрыто, я виноват. Я не знал, что он устанавливает интерфейс как закрытый, если вы не упоминаете public перед ним.

5. Спасибо, ребята!