카테고리 없음

[자바] NullPointerException 추상 클래스를 호출하려고 할 때-Java

행복을전해요 2021. 1. 24. 11:46

A는 NullPointerException당신에 의해 촉발 write가능성에 의해 발생 될 수 있습니다 방법 null유형의 인수 Item특별히에 :

item.getFileName();-> null Object.

다음 원인으로 인해 발생할 수도 있습니다.

new File(invFilename)-> 새 초기화 Filenull인수 (경우에 item아닙니다 null, 그러나 item.getFileName()입니다).

... 등

Item추상 클래스 라는 사실과 관련이 없습니다 .

노트

댓글에서 다른 사람들이 언급했듯이 String내용 비교는 연산자가 equals아닌에서 수행됩니다 ==.

-------------------

Item 클래스는 추상입니다.

즉,이 클래스의 객체를 가질 수 없습니다. 추상 클래스를 확장하고 새 클래스의 객체를 전달해야합니다.

여기에서 확인 하십시오 . 추상 클래스는 인스턴스화 할 수 없지만 서브 클래 싱 할 수 있습니다.

-------------------

"문제는 Item 클래스가 추상적이어서 전달되면 NullPointerException이 발생한다는 것입니다."

초록은 의미가 없습니다 null. 추상 클래스는 직접 인스턴스화 할 수 없지만 하위 클래스는 가능합니다. 따라서 다음과 같은 기능을 갖는 것은 완벽하게 합법적입니다.

public String getAbstrClassesToString(AnAbstractClass abstract_class)  {
   try  {
         return  abstract_class.toString();
            }  catch(NullPointerException npx)  {
                  if(abstract_class == null)  {
                           throw  new NullPointerException("abstract_class");
                                 }
                                 
                                       //Just in case the toString() throws an NPX
                                             throw  npx;
                                                }
                                                }
                                                

이제 이것을 다음과 같이 부를 있습니다.

getAbstrClassesToString(null);

이는 분명히 발생합니다 NullPointerException, 또는 당신은 이것을 호출 할 수

getAbstrClassesToString(new ConcreteSubClassOfAnAbstractClass());

그것은 완벽하게 합법적이며 분명히 null이 아닙니다 .

즉, NullPointerException문제는 추상성과 관련이 없습니다.

추가 정보 : https://www.google.com/search?q=abstract+class+java+tutorials

-------------------

Item전달되는 유형의 개체는 인스턴스화되어야합니다.

다른 사람들이 지적했듯이 다음을 통해 단순히 만들 수는 없습니다.

Item item = new Item(); // this does not work!

그러나 extend클래스를 만들고 필요한 모든 추상 methopd를 만든 다음 새 클래스를 인스턴스화 할 수 있습니다 .

class ItemB extends Item
{
  ...
  }
  

그런 다음 새 수업으로 작업 할 수 있습니다.

ItemB item = new ItemB();


출처
https://stackoverflow.com/questions/22019821