2016-04-13 5 views
-5
public class CompileTest{ 
    public static void main(String args[]){ 
     Class.forName("string"); 
     System.out.println("Inside main"); 
     OutputStream o=new ByteArrayOutputStream(); 
    } 
} 

Это мой код, когда я компилирую это тоНеожиданный результат в Java

C:\Users\MOHD RASHID\Documents\java>javac CompileTest.java 

CompileTest.java:8: error: incompatible types: ByteArrayOutputStream cannot be converted to OutputStream 
OutputStream o=new ByteArrayOutputStream(); 

генерируется, но не должны быть сгенерированы и forName() метод броска ClassNotFoundException который компилировать исключение времени и, следовательно, должны быть пойманы или обрабатывать, но эта ошибка также не сгенерирована? скажите, пожалуйста, что мне делать?

+0

Для вашей второй части вопроса (относительно OutputStream) вы импортируете соответствующие классы? Вы компилируете и выполняете компиляцию и отлично выполняете, если я завершаю вызов 'Class.forName' в try/catch. –

+0

Я не могу воспроизвести вашу проблему. Возможно, вы создали собственный класс 'OutputStream' или' ByteArrayOutputStream'? Также этот код не будет компилироваться по другой причине: вы не обрабатываете исключения, которые могут быть выбраны из класса Class.forName. – Pshemo

+1

Какие пакеты вы импортируете? По сообщению об ошибке, похоже, что вы где-то определили OutputStream или ByteArrayOutputStream и не импортировали стандартные по умолчанию java –

ответ

2
Class.forName("string") 

Это вызовет исключение ClassNotFoundException, если не будет найден класс с именем. Возможно, вы имели в виду String.

В любом случае ClassNotFoundException является проверенным исключением, и любой метод, который генерирует проверенное исключение, должен быть завернут в блок try-catch, и соответствующее исключение должно быть обработано. Другой вариант - объявить, что main() выбрасывает это исключенное исключение.

Там не должно быть никаких ошибок в следующей строке, пока ваш импорт не противоречат друг другу, или если неправильно OutputStream или ByteArrayOutputStream импортируется:

OutputStream o=new ByteArrayOutputStream(); 
3

Ваша ошибка компиляции, вероятно, связано с тем, что тип OutputStream, указанный в вашем коде, является чем-то иным, чем java.io.OutputStream. Проверьте свои операторы импорта, и если вы видите OutputStream в другом пакете, измените его на java.io.OutputStream. Затем ваш код должен скомпилироваться. И он также выкинет ClassNotFoundException во время выполнения, так как string не является допустимым классом (должен быть java.lang.String).

0

Ваше сообщение об ошибке - это ключ.

error: incompatible types: ByteArrayOutputStream cannot be converted to OutputStream 

Если бы вы использовали встроенные классы сообщение прочтет

error: incompatible types: java.io.ByteArrayOutputStream cannot be converted to java.io.OutputStream 

Примечания: нет имени пакета, указывающего у Вас есть свои собственные реализации и ваш ByteArrayOutputStream не распространяется или реализовать OutputStream

0

Спасибо ... моя проблема была решена. На самом деле в этой папке был еще один класс ByteArrayOutputStream («java» в моей структуре каталогов). И вместо доступа к java.io.OutputStream, класс ByteArrayOutputStream в той же папке доступен. И этот класс не расширяет OutputStream. Именно поэтому отображается ошибка «ByteArrayOutputStream не может быть преобразована в OutputStream». Из-за этой ошибки оператор Class.forName(); не отображается исключение «ClassNotFoundException должно быть поймано или объявлено брошенным»

Смежные вопросы