나는 텍스트 파일에서 고정 길이로 구분 된 단어를 읽고 사전에 단어의 존재 여부를 조회하기 위해 TreeSet을 만듭니다.이 경우 예외를 올바르게 처리하려면 어떻게해야합니까?
그래서 분명히 어떻게 든 IOException을 처리해야합니다. 내 문제는 Dictionary 클래스에 오류 처리 책임이 있는지 아니면 Dictionary 객체를 만드는 코드에 해당해야합니까? 여기
내가 가진 무엇 :
public class Dictionary
{
private final TreeSet<String> stringSet = new TreeSet<>();
// constructor
public Dictionary(String fileName) throws IOException
{
try (final Reader reader = new InputStreamReader(new FileInputStream(fileName)))
{
// load dictionary into stringSet
final char[] buffer = new char[4];
int numRead = -1;
while ((numRead = reader.read(buffer)) > 0)
stringSet.add(new String(buffer, 0, numRead).toUpperCase());
}
catch (IOException e)
{
throw e;
}
}
public boolean contains(String word)
{
return stringSet.contains(word);
}
}
그리고 사전 객체 생성 코드 :
public class MainClass
{
public static void main(String args[])
{
String fileName = "C:/Users/Brandon/Desktop/Android Development/Practice Apps/SwapWords_Prototype/src/data/dictionary.txt";
try
{
Dictionary dict = new Dictionary(fileName);
}
catch (IOException e)
{
System.out.println("Could not load dictionary <" + fileName + ">");
e.printStackTrace();
}
// TODO handle dict
}
}
캐치를 사전과 IOException가 처리하거나이 호출 코드에 던져 하는가를? 내 말은, 둘 중 하나가 작동하지만 더 논리적이라고?
당신이 한 일은 괜찮은 것 같습니다 (가능한 한 늦게 예외를 잡으십시오). 예외적으로'catch (IOException e) {throw e; }'... – assylias
나는 사전 파일을 ('new Dictionary() .load (File)'과 같은 것으로 사용되는) 별도의 메소드로 로딩하는 논리를 옮길 것이다. 그런 다음 생성자에서 throw를 제거합니다. 참고로이 질문은 [CodeReview StackExchange] (http://codereview.stackexchange.com/)에 더 적합합니다. – Perception
@Perception :이 아이디어에 대해 너무 고마워. 실제로 문제를 해결하기 위해 엉덩이 - 뒤로 코드를 써야한다는 문제가있었습니다. 훨씬 조직화되어 있으며, 무엇이 완료되고 있는지 훨씬 더 분명합니다. 또한 CodeReview 링크 덕분에, 나는 그것조차도 존재하지 않았다. –