Java 프로그래밍의 경우 @Deprecated 표기법과 인터페이스 메소드를 사용하면 얻을 수있는 이점이 있지만 구현하는 클래스에는없는 점은 무엇입니까?인터페이스에서만 @Deprecated 표기법을 사용하면 어떤 이점이 있습니까?
답변
Java 언어 자체의 단점이라고 생각합니다. 인터페이스에서 주석을 통해 사용되지 않는 메소드를 지정하고 구현 클래스에서 메소드가 더 이상 사용되지 않는 것으로 간주하지 않는 것은 의미가 없습니다.
메서드의 @ deprecated-ness가 상속 된 경우 더 좋을 것입니다. 불행히도, 자바는 이것을 지원하지 않는 것 같습니다.
IDE와 같은 툴링이 이러한 상황을 어떻게 처리하는지 고려하십시오. 변수의 유형이 인터페이스로 선언되면 @deprecated 메소드가 취소 선으로 렌더링 될 수 있습니다. 그러나 변수의 유형이 구현 클래스로 선언되고 클래스 서명에 @deprecated가 포함되지 않으면 메소드는 취소 선없이 렌더링됩니다.
기본적인 질문은 인터페이스에서 구현되지만 구현 클래스 (또는 확장 인터페이스)에서 메소드가 더 이상 사용되지 않는 것은 무엇을 의미합니까? 유일하게 합당한 의도는 메소드가 클래스 계층 구조의 인터페이스 아래에있는 모든 것에 대해 사용되지 않는 것입니다. 그러나 그 언어는 그 행동을지지하지 않습니다.
는 논란 입니다. 사람들이 인터페이스에 코드를 작성하면 해당 인터페이스의 특정 측면을 사용되지 않는 것으로 표시 할 수 있습니다. 그런 식으로 사람들은 그것을 사용하지 않는 것을 압니다.
인터페이스의 구현 클래스는 세부 사항입니다. 이 클래스의 메소드는 인터페이스를 만족 시키지만 단독으로 사용되지 않을 수는 없습니다. 그 방법을 비추천하는 것은 적절할 수도 있고 그렇지 않을 수도 있습니다.
인터페이스를 구현하는 새 클래스를 만드는 것은 사용되지 않는 메소드를 구현해야한다는 것을 의미합니다. 그들은 클래스의 클라이언트가 사용되지 않는 메소드를 사용하지 않는다는 것을 알지 않는 한 아마 작동해야합니다. 예를 들어, HTTP 서블릿 컨테이너를 작성하는 경우 encodeURL()
을 사용하지 않아도 HttpServletResponse.encodeUrl()
메소드를 구현해야합니다. 그것은 클래스의 사용자가 그 비추천 메소드를 호출 할 수 있기 때문입니다.
@Deprecated는 문서이다 (그렇지 않으면 반례를 제공하십시오) 사용되지 않는 메소드 인터페이스가 구현의 관계없이 사용해서는 안 : 내 의견
public interface Joe {
@Deprecated
public void doSomething();
...
}
public final class Joseph implements Joe {
public void doSomething() {
...
}
...
}
"[구현 방법]이 부적 절한 경우가 적절할 수도 있고 적절하지 않을 수도 있습니다." 특히 인터페이스 메소드 doSomething이 Joe의 모든 구현에 적합하지는 않지만이 특정 구현 인 Joseph에 적합 할 수 있습니다. 따라서 인터페이스의 사용이 중단되었지만 특정 구현에서는 그렇지 않았습니다. – drew
인터페이스와 구현에서 부적절한 메소드로 기존 코드를 리팩터링하려는 경우 인터페이스 메소드에 @Deprecated
을 사용하여 몇 가지 릴리스에 대해 임시로 새로운 메소드를 임시로 사용할 수 있습니다. 추한 것일 수도 있습니다. 단지 코드를 하위 호환성을 유지하기 위해 사용할 수 있습니다. 그러면 IDE 및 SONAR 보고서에 더 이상 사용되지 않는 메소드가 표시되고 클라이언트가 새 메소드를 사용하도록 표시됩니다.
- 1. MSBuild를 사용하면 어떤 이점이 있습니까?
- 2. sessionStorage를 사용하면 어떤 이점이 있습니까?
- 3. WCF를 사용하면 어떤 이점이 있습니까?
- 4. Subversion을 사용하면 어떤 이점이 있습니까?
- 5. Tomcat에서 APR을 사용하면 어떤 이점이 있습니까?
- 6. Mongo에서 상속을 사용하면 어떤 이점이 있습니까?
- 7. PHP에 java bridge를 사용하면 어떤 이점이 있습니까?
- 8. Vaadin에서는 VerticalContainer보다 Panel을 사용하면 어떤 이점이 있습니까?
- 9. 여기에 varchar보다 varbinary를 사용하면 어떤 이점이 있습니까?
- 10. Python VirtualBox API를 사용하면 어떤 이점이 있습니까?
- 11. 내부적으로 속성을 사용하면 어떤 이점이 있습니까?
- 12. Apache FOP보다 Antennahouse를 사용하면 어떤 이점이 있습니까?
- 13. VARCHAR에 비해 CHAR를 사용하면 어떤 이점이 있습니까?
- 14. C#에서 인터페이스를 사용하면 어떤 이점이 있습니까?
- 15. AND 또는 &&를 사용하면 어떤 이점이 있습니까?
- 16. Composite 패턴을 사용하면 Array에서만 어떤 이점이 있습니까?
- 17. 메서드 시그니처에 제네릭을 사용하면 어떤 이점이 있습니까?
- 18. JCE에 fips를 사용하면 어떤 이점이 있습니까?
- 19. PHP에서 CURL을 래퍼로 사용하면 어떤 이점이 있습니까?
- 20. Julian Dates를 코드에 사용하면 어떤 이점이 있습니까?
- 21. VBA에서 클래스를 사용하면 어떤 이점이 있습니까?
- 22. 잡종상에서 승객을 사용하면 어떤 이점이 있습니까?
- 23. NginX를 Node.js에 사용하면 어떤 이점이 있습니까?
- 24. MVC에서 HtmlHelper를 사용하면 어떤 이점이 있습니까?
- 25. 업데이트 된 sitemap.xml을 사용하면 어떤 이점이 있습니까?
- 26. 파이썬에서 정적 메서드를 사용하면 어떤 이점이 있습니까?
- 27. SQL Server 인덱스와 함께 INCLUDE 열을 사용하면 어떤 이점이 있습니까?
- 28. C# + WinForms/WPF에서 Java + Swing을 사용하면 어떤 이점이 있습니까?
- 29. 추상 클래스가 아닌 부분 클래스를 사용하면 어떤 이점이 있습니까?
- 30. ASP.NET : 개체를 만들 때 사용하면 어떤 이점이 있습니까?
어쨌든 인터페이스에서 -only- 메소드를 왜 감가 상각합니까? 릴리스 문서에 "Interface 'Joe'를 사용하지 않는 것이 좋습니다." 또는 뭔가. – Zack
인터페이스와 클래스에는 다른 메소드가 있습니다. 혼란스러워서 미안 잭. –