Path: csiph.com!aioe.org!.POSTED.O5hsyUvK01te0L/SZurVSQ.user.gioia.aioe.org!not-for-mail From: =?UTF-8?Q?Arne_Vajh=c3=b8j?= Newsgroups: comp.lang.java.programmer Subject: Re: How to handle methods in a common interface that supports different versions of a message format Date: Mon, 9 Dec 2019 21:24:30 -0500 Organization: Aioe.org NNTP Server Lines: 75 Message-ID: References: <2adff0bf-b579-4a12-87bc-70e1fe90a829@googlegroups.com> <42878753-3e34-4b35-8829-a11f990485d9@googlegroups.com> NNTP-Posting-Host: O5hsyUvK01te0L/SZurVSQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: csiph.com comp.lang.java.programmer:39211 On 12/9/2019 2:51 AM, mike wrote: > Den lördag 7 december 2019 kl. 03:49:27 UTC+1 skrev Arne Vajhøj: >> On 12/6/2019 2:55 AM, mike wrote: >>> I would need some advice in the following issue: >>> >>> public interface Netconf { >>> >>> void methodA(); >>> >>> void methodB(); >>> >>> } >>> >>> The issue I have is that methodA() only supports NETCONF message >>> 1.0 and methodB() only supports NETCONF message 1.1 >>> >>> 1. Is it better to have separate interfaces like: Netconf and >>> Netconf_1.1 ( better naming?) 2. If we use one interface, >>> Netconf, and in the implementation we have a property for >>> netconfVersion should I just throw exception if methodA() is >>> called and we have set netconfVersion 1.1? >>> >>> Any other considerations I need to do when supporting multiple >>> versions of a message like NETCONF? >> >> If you want to use proper typing then I like: >> >> public interface Netconf { NetconfVersion getVersion(); } >> >> public interface Netconf10 extends Netconf { void methodA(); } >> >> public interface Netconf11 extends Netconf { void methodB(); } >> >> Having methods that should not be there and that throws an >> exception is not good IMHO. > Thanks for the reply. I like the idea. I have a follow-up question: > > Since we only had support for 1.0 user only used Netconf interface. > Now we will return two types of interfaces Netconf10 or Netconf11. > This would mean that users using 1.0 (Netconf) now need to use > Netconf10 in those cases they need Netconf 1.0 specific > methods.Correct? If I understand you correctly then your concern is backwards compatibility. So if you today have: public interface Netconf { void methodA(); } public class NetconfFactory { public static Netconf getOne() { ... } } and client code: Netconf nc = NetconfFactory.getOne(); nc.methodA(); Then you will need to either change client code to ref Netconf10 or use different namings: interface NetconfBase interface Netconf extends NetconfBase interface Netconf11 extends NetconfBase Arne