Инициализация статического поля в интерфейсе с обработкой исключений - PullRequest
3 голосов
/ 10 августа 2011

Ну, на самом деле я хотел бы сделать следующее в интерфейсе:

public interface ObjectMethods
{
    static Method getModulus = RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class);
}

Это, конечно, приводит к ошибке компиляции, поскольку исключение, вызванное этим вызовом метода, не обрабатывается должным образом. Но я не могу поместить статический блок в интерфейс. Я думал о создании Enum, но, возможно, кто-то, кто уже сталкивался с этой проблемой. На самом деле не было бы возможности поместить это статическое поле в класс, потому что я должен использовать интерфейс.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Вы можете справиться с этим немного косвенно.(Код не проверен.)

public interface ObjectMethods
    {
        public static class CONSTANTS
        {
               static final Method getModulus ;
               static
               {
                     try
                     {
                           getModulus = RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class);
                     }
                     catch ( Exception cause ) { //handle it }
              }
         }

    }
4 голосов
/ 10 августа 2011

Не могли бы вы создать статический вспомогательный класс, который оборачивает логику блоком try / catch, поглощающим исключение?

public static class ObjectMethodHelper
{
    public static Method getModulusMethod() {
        try {
            return RSAPublicKey.class.getMethod("setModulus", byte[].class, short.class, short.class);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

public interface ObjectMethods
{
    static Method getModulus = ObjectMethodHelper.getModulusMethod();
}
...