关于java接口作为参数的问题

问题描述

配置选项接口:publicinterfaceDataSourceConfigureextendsjava.io.Serializable,ServiceProvider{publicStringgetName();publicvoidsetName();/***获得扩展属性名*@return*/publicString[]getExtPropertyNames();publicObjectgetExtProperty(Stringname);publicvoidsetExtProperty(Stringname,Objectvalue);/***方便序列化,扩展字符串属性扩展*@paramname*@return*/publicStringgetExtPropertyAsString(Stringname);publicvoidsetExtPropertyAsObject(Stringname,Stringvalue);}

持久化接口publicinterfaceDataSourceRepository{publicMap<String,DataSourceConfigure>getAll();publicbooleansave();publicintload();publicbooleanadd(Stringname,DataSourceConfigureconfig);publicbooleanremove(Stringname);publicbooleanupdate(Stringname,DataSourceConfigureconfig);publicDataSourceConfigurefind(Stringname);}

配置选项有两个实现类,一个C3P0,一个Druid,在持久化实现类中我怎么知道add(Stringname,DataSourceConfigureconfig)传入的DataSourceConfigure具体是哪个实现类的?

解决方案

解决方案二:
你不用知道,这就是接口存在的意义。否则抽象出一个接口来干嘛,都extendsobject好了
解决方案三:
但是我实现类中放了其他一些属性啊,我怎么取出来啊。
解决方案四:
接口就是对客户类封装实现类,将对实现类的操作体现到接口类上述情况应该在接口类中添加抽象的属性访问方法
解决方案五:
引用2楼thewayuare的回复:

但是我实现类中放了其他一些属性啊,我怎么取出来啊。

调用接口的方法取值,非要知道是哪个实现类,用instanceof不就知道了
解决方案六:
如果你要将参数定义成某个接口,那你的实现就应该只针对这个接口。如果要引用其他的属性,你可以继续往接口中添加方法,或者用抽象类再封装一次。
解决方案七:
理想状态下,你不应该知道是哪个实现类,你使用接口,就是使用接口里定义的方法,之所以“面向接口编程”,就是要屏蔽掉具体实现类,因为具体实现类都会实现所有的接口方法,因此理论上不会影响你使用这个接口。如果你一定要使用具体实现类里的东西,那有两种情况,一种是设计不合理,这种情况不讨论了,要么改设计,要么就对付着用instanceof判断然后强转;另一种是设计合理的,比如工厂模式,使用具体类的那个类也是一个特定实现,在这个实现类里一定是使用另一个具体实现类的,如果那个类不是期望的具体实现类,就不是设计初衷了。这种情况下一般用instanceof判断一下,如果传入进来的不是特定实现,就抛出异常,如果是预期的特定实现,就强转后使用。

时间: 2024-10-29 20:38:10

关于java接口作为参数的问题的相关文章

接口交互参数最好不要用map?(Gson转map)

问题描述 接口交互参数最好不要用map?(Gson转map) 今天在做webService开发时,用到了map,但是被告知最好不要用,说原因是"接口交互参数最好不要用map,效率低,不便于理解,而且分层不清楚",真的是这样吗?求大神解答. 解决方案 用什么都可以 只要用的方便: 这个是 gson 转map的教程 推荐你看看 http://www.sh0745.com/java/201503/26155454.html 解决方案二: 既然是webservice,那么接口就用json好了.

耦合-求指教,关于JAVA接口,这样理解对不对?

问题描述 求指教,关于JAVA接口,这样理解对不对? 把接口看作是电脑上的USB接口,USB接口里有一种方法定义了一种规范,外部的usb设备比如usb鼠标,usb风扇在这个规范下具体实现了鼠标和扇风的功能,这样,人类可以使用usb这一种东西来调用usb接口外部的不同功能,需要改动的时候,只需要把能够实现所需要的功能的usb设备的线接到usb接口上就行了,而不用去做大量改动. 这么理解有什么偏差吗?求指教 解决方案 你可以有不同的理解,这没有任何问题. 当然,我觉得更接近编程思维的理解是,接口是一

Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析_Android

        在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码.细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我们如何使用Java语言来使用系统的Binder机制来进行进程间通信呢?这就是本文要介绍的Android系统应用程序框架层的用Java语言来实现的Binder接口了.        熟悉Android系统

java-webservice通过url传递参数调用接口,参数中含“/”要怎么处理?

问题描述 webservice通过url传递参数调用接口,参数中含"/"要怎么处理? 我现在在做一个调用企业QQ接口来发信息的平台,是通过webservice在url传递参数调用接口.. 但是短信内容中含斜杠时会干扰参数的传递,大神教我怎么解决啊? @GET @Path(""/sendTips/{receivers}/{content}/{windowTitle}/{tipsTitle}/{tipsUrl}"") @Produces ({Medi

java 接口怎么写,求教,本人小白啊

问题描述 java 接口怎么写,求教,本人小白啊 没写过接口,大意就是 别人用角色登录,登陆之后就可以看到列表,求教接口怎么写,写的清楚点,谢谢啦,在线等 解决方案 接口没有实现 你哟啊接口也实现不了你的功能啊 解决方案二: 接口是定义一个方法,没有具体实现:不能实现你的需求. 根据你的需求,应该是登录后调用一个方法,查询你所需的数据吧? 解决方案三: java接口是抽象方法的集合体,要用的话得用实体类实现并且重写方法才可以实现你的功能 解决方案四: 接口就是定义一个方法 ,规定了调用逻辑层 所

初探设计:Java接口和抽象类何时用?怎么用?

Writer      :BYSocket(泥沙砖瓦浆木匠 今天犯了个错: "接口变动,伤筋动骨,除非你确定只有你一个人在用".哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类).官方定义让人费解,但是记忆方法是也不错的 - 包含抽象方法的类叫做抽象类. 接口就是把抽象的深度更深,它就像用简短的非逻辑的一些规则表示类之间的关系.可以比作协议,比如通信使用的UDP/TCP协议等

Java 接口和抽象类区别

1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了.当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 .面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,我就不能不提到曾让我头痛的Java接口和Java抽象类了,这也是本文我想说的重点. 既然面向对象设计的重点在于

用 Java 接口实现回调函数的等价功能

摘要在 Java 支持方法指针之前,Java 接口不能提供一种实现回调的好方法.假如您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧.熟悉 MS-Windows 和 X Window System 事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即"回调")的函数指针.Java 的面向对象模型目前并不支持方法指针,这样似乎就不可能使用这种很好的机制.但我们并不是一点办法都没有! Java 的接口支持提供了一种获得回调的等价功能的机制.其技巧就是:定义一个简单

深入解析Java接口(interface)的使用_java

Java接口(interface)的概念及使用 在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加"抽象". 接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做. 现实中也有很多接口的实例,比如说串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口.Serial ATA委员会不负责生产硬盘,只是指定