2013-04-01 2 views
2

Пока я пытаюсь реализовать HttpSession, я должен переопределить метод getSessionContext. Но он вызывает устаревшие предупреждения, потому что метод и его тип возврата HttpSessionContext устарел.Предупреждение об устаревании во время реализации HttpSession

@deprecated тэг javadoc исправляет предупреждение об определении getSessionContext, но не может исправить предупреждение при ввозе HttpSessionContext. И установка @SuppressWarnings перед импортом вызывает ошибку компиляции.

Как я могу исправить оба предупреждения?

Код:

import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpSessionContext; 

public class MyServletSession implements HttpSession { 
    // ... 

    /** 
    * @deprecated 
    */ 
    @Override 
    public HttpSessionContext getSessionContext() { 
     throw new UnsupportedOperationException(); 
    } 

    // ... 
} 

Предупреждение:

$ javac -Xlint:deprecation -cp /path/to/javax.servlet-api-3.0.1.jar MyServletSession.java 
MyServletSession.java:5: warning: [deprecation] HttpSessionContext in javax.servlet.http has been deprecated 
import javax.servlet.http.HttpSessionContext; 
            ^
1 warning 
+0

Я считаю, что вы должны стараться избегать использования 'HttpSessionContext'. Согласно javadoc: «Устаревший. С точки зрения безопасности Java-сервлета API 2.1 (с точки зрения безопасности) без замены. Этот интерфейс будет удален в будущей версии этого API». –

+0

Обычно усталость существует по уважительной причине: сказать вам, что если вы можете себе это позволить, вы должны следить за тем, какие новые реализации должны заменить устаревшие классы методов. В противном случае, как пометить весь класс с помощью аннотации @Override (что, конечно, не рекомендуется)? – ylabidi

+0

Почему вы реализуете HttpSession вообще? Вы реализуете контейнер? – EJP

ответ

1

Если вам действительно нужно реализовать свой собственный HttpSession, и подавить предупреждения устаревания, я считаю, что правильный аргумент компилятор -Xlint:-deprecation. Обратите внимание на - до deprecation

Редактировать: Это позволяет удалить все предупреждения об отказе, поэтому может оказаться неприемлемым, если вы пытаетесь подавить только предупреждения в этом классе. Вместо этого я нашел, что это работает для меня:

// Note, no import of javax.servlet.http.HttpSessionContext 
import javax.servlet.http.HttpSession; 

@SuppressWarnings("deprecation") 
public class MySession implements HttpSession { 

    /** 
    * This javadoc comment, along with the fully qualified name of HttpSessionContex in the method signature seems to do the trick. 
    * @deprecated 
    */ 
    public javax.servlet.http.HttpSessionContext getSessionContext() { 
    } 

    //... All your other methods 
} 
+0

Спасибо, но я хочу подавить (или исправить) только предупреждение. – npcode

+0

Я обновил ответ на примере, который работает для меня. – NilsH

+0

Ничего себе он отлично работает даже без @SupressWarnings («усталость»). Благодаря! – npcode