A는 NullPointerException
당신에 의해 촉발 write
가능성에 의해 발생 될 수 있습니다 방법 null
유형의 인수 Item
특별히에 :
item.getFileName();
-> null
Object
.
다음 원인으로 인해 발생할 수도 있습니다.
new File(invFilename)
-> 새 초기화 File
와 null
인수 (경우에 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