Как определить явный конструктор для объекта URL в Java - PullRequest
4 голосов
/ 24 марта 2012

Я определяю URL при обработке (или java) строкой:

URL base = new URL("http://www.google.com/");

Поэтому я получаю следующую ошибку: Конструктор по умолчанию не может обработать тип исключения MalformedURLException, созданный неявным супер-конструктором.Необходимо определить явный конструктор .Я предполагаю, что если мой URL-адрес недействителен, то нет соответствующего catch, чтобы поймать ошибку (потому что я объявляю свой URL-адрес за пределами try).

Но я хочу определитьэтот URL за пределами try, потому что мой основной блок try находится в цикле, а URL-адрес является статическим.Поэтому нет необходимости делать определение URL более одного раза (и поскольку оно статическое, я не боюсь каких-либо исключений MalformedURLE).

Как мне это сделать?Неужели нет другого способа, кроме как определить URL в отдельном блоке try?(потому что это кажется слишком большим для простого статического URL)


// import libraries
import java.net.*;
import java.io.*;

// url
URL base = new URL("http://www.google.com");

void setup() {
}

void draw() {
  try {
    // retrieve url
    String[] results = loadStrings(base);

    // print results
    println(results[0]);
  }  
  catch (MalformedURLException e) {
    e.printStackTrace();
  }
  catch (ConnectException e) {
    e.printStackTrace();
  }
  catch (IOException e) {
    e.printStackTrace();
  }

  // stop looping
  noLoop();

}

Ответы [ 2 ]

13 голосов
/ 24 марта 2012

Вам просто нужно определить конструктор по умолчанию для вашего класса, который выдает исключение MalformedURLException:

class MyClass {
    private URL url = new URL("http://www.google.com");

    public MyClass() throws MalformedURLException {}
}

Ошибка возникает из-за того, что конструктор Java для вашего класса не может генерировать что-либо, вы должныукажите, что он может.

Редактировать

Видя ваш код, вы можете выбрать другой вариант (я предполагаю, что setup () вызывается перед использованием URL-адреса)

URL url;

void setup() {
    try {
        url = new URL("http://www.google.com");
    } catch (MalformedURLException ex) {
        throw new RuntimeException(ex);
    }
}
1 голос
/ 24 марта 2012

Поскольку конструктор URL выдает проверенное исключение , вы должны либо его перехватить, либо сбросить . Вы можете создать свой собственный метод фабрики, который просто обернет его в RuntimeException:

public class URLFactory {
  public static URL create(String urlString) {
    try {
      return new URL(urlString);
    } catch (MalformedURLException e) {
      throw new RuntimeException(e);
    }
  }
}

Или, может быть, только это в вашей среде?

URL createURL(String urlString) {
  try {
    return new URL(urlString);
  } catch (MalformedURLException e) {
    throw new RuntimeException(e);
  }
}

И использовать вместо этого:

URL base = URLFactory.create("http://www.google.com");
...