ошибка — : несовместимые типы: возможное преобразование с потерями из int в short

#java #exception

#java #исключение

Вопрос:

Я знаю, что эта ошибка возникает, когда мы пытаемся уменьшить значения, но в моем коде я не могу определить, куда я уменьшил значения.

 class TestClass {
    public static void main(String args[] ) throws Exception {
        TestDemo obj=new TestDemo();
        TestDemo2 obj1= new TestDemo2();
        obj.show(5);
        obj1.show("helloworld");
    }
}
class TestDemo{
    public void show(short N){
        System.out.println(N*2);
    }  
}
class TestDemo2{
    public Void show(String S){
        System.out.println(S);
    }
}
  

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

1. можете ли вы добавить к этому трассировку стека?

2. @Buzzet OP не может этого сделать, поскольку проблема заключается в ошибке компилятора, а не в ошибке времени выполнения.

3. Вопрос стиля — есть ли какая-либо причина объявлять параметр ‘show’ как ‘short’, а не ‘int’? В этом примере это кажется чрезмерно специфичным.

4. ‘int’ здесь бы сработал, но поскольку значение для N может быть ограничено в пределах ‘short’, поэтому я попробовал с short, который выдал ошибку

Ответ №1:

Эта ошибка возникает из-за obj.show (5).

Два исправления, которые вы можете выполнить в любом:

     class TestClass {
    public static void main(String args[] ) throws Exception {
        TestDemo obj=new TestDemo();
        TestDemo2 obj1= new TestDemo2();
        obj.show((short)5);
        obj1.show("helloworld");
    }
}
class TestDemo{
    public void show(short i){
        
        System.out.println(i*2);
    }  
}
class TestDemo2{
    public void show(String S){
        System.out.println(S);
    }
}
  

Вторая версия

     class TestClass {
    public static void main(String args[] ) throws Exception {
        TestDemo obj=new TestDemo();
        TestDemo2 obj1= new TestDemo2();
        obj.show(5);
        obj1.show("helloworld");
    }
}
class TestDemo{
    public void show(int i){
        
        System.out.println(i*2);
    }  
}
class TestDemo2{
    public void show(String S){
        System.out.println(S);
    }
}
  

Ответ №2:

Попробуйте изменить short N , в public void show(short N) с test Demo на int .

Ответ №3:

попробуйте сначала привести int.

 obj.show((short)5);
  

Ответ №4:

Число 5 по умолчанию обрабатывается как целое число, которое передается методу с коротким аргументом.

 obj.show((short)5);
  

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

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

1. Немного странное «для дальнейшего использования», которое вы туда добавили — отсутствие приведения означает, что это ошибка времени компиляции. Трассировки стека не имеют отношения к этому вопросу. Вы могли бы также дать несколько советов о ловле нахлыстом 😉

2. Тем не менее, ошибка компилятора идентифицирует номер строки.