精华内容
下载资源
问答
  • 在之前的章节里面我们提到接口,父类引用子类对象,然后把方法给缩窄了,但是我们这一章节学习到反射,这个约束就变得没有那么严格。 我们来看看下面的例子: package com.ray.ch11; public class Test { pub....

    这一章节我们来讨论一下接口与类型信息。

    在之前的章节里面我们提到接口,父类引用子类对象,然后把方法给缩窄了,但是我们这一章节学习到反射,这个约束就变得没有那么严格。

    我们来看看下面的例子:

    package com.ray.ch11;
    
    public class Test {
    	public static void main(String[] args) {
    		Person man = new Man();
    		man.sleep();
    		man.run();
    		// man.say();//error
    	}
    }
    
    interface Person {
    
    	public void sleep();
    
    	public void run();
    }
    
    class Man implements Person {
    	public void say() {
    	}
    
    	@Override
    	public void sleep() {
    	}
    
    	@Override
    	public void run() {
    	}
    }

    我们一般的代码就会向上面一样,直接定义接口,然后接口指向实现的类。一般的情况就像上面一样,方法给变少了。但是,我们修改一下方法:

    package com.ray.ch11;
    
    public class Test {
    	public static void main(String[] args) {
    		Person man = new Man();
    		man.sleep();
    		man.run();
    		// man.say();//error
    		if (man instanceof Man) {
    			Man man2 = (Man) man;
    			man2.say();
    		}
    	}
    }
    
    interface Person {
    
    	public void sleep();
    
    	public void run();
    }
    
    class Man implements Person {
    	public void say() {
    	}
    
    	@Override
    	public void sleep() {
    	}
    
    	@Override
    	public void run() {
    	}
    }

    我们修改了一下,通过isInstanceOf方法,来向下转型,这样我们就可以得到Man里面所有的方法,甚至是下面的代码:

    package com.ray.ch11;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Test {
    	public static void main(String[] args) {
    		try {
    			Class<?> manClass = Class.forName("com.ray.ch11.Man");
    			Man man = (Man) manClass.newInstance();
    			Method[] methods = man.getClass().getDeclaredMethods();
    			for (Method method : methods) {
    				System.out.println(method.getName());
    			}
    			Method sayMethod = manClass.newInstance().getClass()
    					.getDeclaredMethod("say");
    			sayMethod.setAccessible(true);
    			sayMethod.invoke(man);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SecurityException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    		} catch (IllegalArgumentException e) {
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    interface Person {
    
    	public void sleep();
    
    	public void run();
    }
    
    class Man implements Person {
    	private void say() {
    		System.out.println("method say");
    	}
    
    	@Override
    	public void sleep() {
    	}
    
    	@Override
    	public void run() {
    	}
    }
    通过上面的代码,我们直接调用类里面所有的方法,包括私有方法。

    这个对于封装来说是比较致命的,因此,我们提供的服务端代码一般都隐藏了类的信息,例如:

    package com.ray.ch11;
    
    public class Test {
    
    	public static Person makePerson() {
    		return new Man();
    	}
    
    	public static void main(String[] args) {
    		Person person = makePerson();
    	}
    }
    
    interface Person {
    
    	public void sleep();
    
    	public void run();
    }
    
    class Man implements Person {
    	private void say() {
    		System.out.println("method say");
    	}
    
    	@Override
    	public void sleep() {
    	}
    
    	@Override
    	public void run() {
    	}
    }

    我们通过一个方法隐含了类的实现,全部是以接口的形式对外展现,这样就可以避免了上面的一些问题。


    总结:这一章节主要讲述了接口与类型信息的内容,需要注意跨过接口直接调用类的情况。


    这一章节就到这里,谢谢。

    -----------------------------------

    目录




    转载于:https://my.oschina.net/u/2325575/blog/543722

    展开全文
  • 今天用java调用别人的webservice接口,我用的是eclipse生成的webservice client,得到代理类,实例化代理类对象proxy,利用proxy去调用对方的方法,但是第一步登录成功后,再去调用其他的方法时报用户没有登录的错误...
  • Android NDK调用Java方法

    千次阅读 2018-03-28 10:08:26
    都忘记怎么使用了,昨天测试一个demo,在JNI里面调用Java方法,开始总是失败,网上找了一些例子,和看了一本JNI编程的书《Android C++高级编程 使用NDK[ 英文]》例子中所使用的方法跟现在的JNI接口的使用方法有点...

    好久不写Android的JNI编程,都忘记怎么使用了,昨天测试一个demo,在JNI里面调用Java的方法,开始总是失败,网上找了一些例子,和看了一本JNI编程的书《Android C++高级编程 使用NDK[ 英文]》例子中所使用的方法跟现在的JNI接口的使用方法有点不一样。

    这里写图片描述
    书里的例子和网上找到的例子都是这样的,在使用env接口的时候,需要取内容(*env)->xxxMethodName(); 而且几乎每个env函数的第一个参数还要把env传进去。

    我使用最新搭建好的NDK环境,用AndroidStuido创建了一个NDK项目,创建好的项目是这样使用env接口的
    env->xxxMethodName(); 而且第一个参数不用再传入env进去了,跟以前的调用方式相比,稍微简单了点。

    下面是我的demo

    这里写图片描述

    我在MainActivity中定义了一个fun方法,这个就是待会儿要被JNI调用的Java方法。在onCreate方法中,会调用JNI的stringFromJNI函数,这个函数是用C++写的,在JNI里面

    JNI的代码是这样的
    这里写图片描述

    运行结果

    这里写图片描述

    如果我们想调用其他自定义类中的方法,比如我新建了一个test类

    这里写图片描述

    test类中有个fun方法,但是这个test类没有在任何地方使用过,那么在JNI中想调用这个类的fun方法,只能先创建一个test类的实例,才能调用fun方法。

    这里写图片描述

    展开全文
  • public interface UserMapper extends Mapper,InsertListMapper {}我的Mapper继承了jar包里面的InsertListMapper,也就是批量插入的Mapper,但是给我报错报错信息如下,好像是它实现查询的类SpecialProvider没被初始...

    public interface UserMapper extends Mapper,InsertListMapper {}

    我的Mapper继承了jar包里面的InsertListMapper,也就是批量插入的Mapper,但是给我报错

    报错信息如下,好像是它实现查询的类SpecialProvider没被初始化,这需要加配置么还是需要怎么改下

    DEBUG - Resolving exception from handler [public java.lang.String com.zqws.app.trade.controller.TestController.test(org.springframework.ui.Model) throws java.lang.Exception]: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    DEBUG - Resolving exception from handler [public java.lang.String com.zqws.app.trade.controller.TestController.test(org.springframework.ui.Model) throws java.lang.Exception]: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    DEBUG - Resolving exception from handler [public java.lang.String com.zqws.app.trade.controller.TestController.test(org.springframework.ui.Model) throws java.lang.Exception]: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    DEBUG - Could not complete request

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)

    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)

    at com.sun.proxy.$Proxy19.insert(Unknown Source)

    at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:240)

    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:51)

    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)

    at com.sun.proxy.$Proxy25.insertList(Unknown Source)

    at com.zqws.app.trade.controller.TestController.test(TestController.java:39)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:483)

    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)

    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)

    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)

    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)

    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)

    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)

    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)

    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)

    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)

    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)

    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)

    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

    at java.lang.Thread.run(Thread.java:745)

    Caused by: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:78)

    at org.apache.ibatis.builder.annotation.ProviderSqlSource.getBoundSql(ProviderSqlSource.java:63)

    at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278)

    at org.apache.ibatis.executor.statement.BaseStatementHandler.(BaseStatementHandler.java:64)

    at org.apache.ibatis.executor.statement.PreparedStatementHandler.(PreparedStatementHandler.java:39)

    at org.apache.ibatis.executor.statement.RoutingStatementHandler.(RoutingStatementHandler.java:45)

    at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:468)

    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:46)

    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105)

    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:71)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:483)

    at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)

    at com.sun.proxy.$Proxy32.update(Unknown Source)

    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152)

    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:483)

    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)

    ... 52 more

    Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider

    at java.lang.Class.newInstance(Class.java:423)

    at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:71)

    ... 74 more

    Caused by: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.()

    at java.lang.Class.getConstructor0(Class.java:3074)

    at java.lang.Class.newInstance(Class.java:408)

    ... 75 more

    展开全文
  • Java接口

    2019-05-08 19:59:02
    接口的意义,实现了设计与实现的分离。接口是抽象的。 接口里面只有常量和抽象方法。接口里面的常量都是由public ...要调用接口要使用的是实现 implements 而不是继承。 接口就类似制定规矩,而怎么实现,具体怎...

    接口的意义,实现了设计与实现的分离。接口是抽象的。
    在这里插入图片描述
    接口里面只有常量和抽象方法。接口里面的常量都是由public static final修饰,写与不写都是一样的效果。接口的抽象方法必须公开,不公开的方法没有意义。
    接口的方法都由public abstract修饰,必然是公开的,必然是抽象的。

    在这里插入图片描述
    要调用接口要使用的是实现 implements 而不是继承。
    接口就类似制定规矩,而怎么实现,具体怎么做又要看类是怎么实现。

    接口可以实现更加抽象的类 如 飞机、火箭、小鸟、石头。

    public interface Flyable {
    	int MAX_SPEED=11000;
    	int MIN_HEIGT = 1;
    	void Fly();
    }
    interface Daren{
    	void dadada();
    }
    class feiji implements Flyable,Daren{
    	@Override
    	public void Fly() {
    		System.out.println("发动机引擎");
    	}
    	@Override
    	public void dadada() {
    		System.out.println("导弹!");
    	}
    }
    class huojian implements Flyable{
    	@Override
    	public void Fly() {
    		System.out.println("推进器");
    	}
    }
    class xiaoniao implements Flyable{
    	@Override
    	public void Fly() {
    		System.out.println("翅膀,气囊");
    	}
    }
    class shitou implements Flyable,Daren{
    	@Override
    	public void Fly() {
    		System.out.println("来来来,丢我!");
    	}
    	@Override
    	public void dadada() {
    		System.out.println("砸啊!");
    	}
    }
    

    它们都要实现Flyable的fly的方法,它们都能飞,但是飞的方法都没有什么联系,就可以通过接口来实现。而且飞机,石头还可以“打人”。在Flyable的后面+,+ Daren进行实现多个接口。
    继承无法实现的类 可以通过接口来实现,接口可以继承多个。也可以多继承
    在这里插入图片描述
    接口无法被实例,只能实例接口的子类。

    在这里插入图片描述

    展开全文
  • Java如何调用DLL?

    2020-12-22 20:50:00
    从上面图中,我们可以接口的定义,假设现在我们需要调用如下接口,该怎么调用呢?  2. 首先看接口  —————————- Java调用开始 —————————  1. 建立一下 Java-Project工程,工程名...
  • 方法如下:设备i/o包中的程序需要使用设备dev包中的程序cmd 运行 命令,而设备dev包中的程序需要调用ecos的硬件抽象层包中的底层接口函数,如图3所示。由于jstatd需要保持一直运行,所以建议使用screen命令执行...
  • 调用wsdl接口 使用xml格式为参数

    千次阅读 2019-04-25 09:56:47
    由于之前代码都是java代码 里面直接调用java包进行传输xml 所以目前要用kettle进行传输必须拼字符串,发现怎么拼都不对 接口为:http://120.35.29.XXXX:XXXX/service/ws/jsonWebService?wsdl 每个人接口不一样我...
  • JNI-通过C++调用JAVA

    2018-10-19 10:00:41
    1、背景  在Report_Center_Task_Proc上报消息线程中,...CallVoidMethod上报数据,那什么在c++代码中怎么调用java函数方法的呢?  首先,JNI接口初始化会传入JNIEnv *env, jobject instance。  JNIEXPORT voi...
  • 简介在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。今天我们介绍一下怎么自定义一个Collector。Collector介绍我们...
  • 怎么java中创建一个自定义的collector简介在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。今天我们介绍一下怎么...
  • 怎么java中创建一个自定义的collector简介在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。今天我们介绍一下怎么...
  • 我们在kotlin文件中定义一个函数,这个函数需要传递一个字符串和一个方法,这个方法需要传递两个数字,并且返回一个数字:(为方便调用声明为object,相当于java里面的静态类吧,里面方法都是可直接访问) ...
  • 也就是说,静态代理是:代理对象里面放一个被代理对象的实例,用代理对象去调用这个实例的方法。  下面用简洁通俗易懂的例子,去讲解一下动态代理。  我们先写一个被代理对象的接口和实现类。被代理的实现类是...
  • 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。 今天我们介绍一下怎么自定义一个Collector。 Collector介绍 我们先...
  • 好比做一份番茄炒蛋,抽象类仅仅只是提供一个“番茄炒鸡蛋”这个做法,但是不提供具体怎么操作,“去皮番茄炒蛋”、“原汁原味番茄炒蛋”、“老少皆宜炒蛋”等这种具体做法就在实例里面实现。 抽象类必须要用...
  • 在前面我们已经了解到如何创建线程,要么就重写Thread类的run方法,要么就实现Runnable接口的run方法,然后调用Thread类的start方法去启动它,可能我们发现了,最终执行的其实还是run方法里面的代码,那么为什么一定...
  • 线程中run()和start()的区别:对于Thread对象来说,当你调用的是start(),线程会被放到等待队列,等待CPU调度,不一定马上执行;...里面实现run()方法;然后把这个实现了Runnable接口的类就新建为一个...
  • 简介在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。今天我们介绍一下怎么自定义一个Collector。Collector介绍我们...
  • 调用show方法的时候,需要往里面传递对象,这里写的是show中的方法,而且show方法的参数列表中的Collection coll是多线程的知识点。无论定义的什么子类对象,都具备Collection接口中的方法。 截图...
  • 以下是我们Java基础多线程的一些知识点总结:线程中run()和start()的区别:对于Thread对象来说,当你调用的是start(),线程会被放到等待队列,等待CPU调度,不一定马上执行;无需等待run()方法执行完毕,可以直接执行...
  • 调用show方法的时候,需要往里面传递对象,这里写的是show中的方法,而且show方法的参数列表中的Collection coll是多线程的知识点。无论定义的什么子类对象,都具备Collection接口中的方法。截图中的黄色下滑波浪线...
  • 1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法怎么命名的呢,这个时候php接口类就起到...
  • 这是java写的webservice接口方法。 public String verifyFaceSingle(String deviceId,byte[] leftImage,byte[] rightImage); 现在需要在vs2010里面获取byte[] leftImage。 Serializer->StartElement("leftImage","...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 212
精华内容 84
关键字:

java方法里面怎么调用接口

java 订阅