导航:首页 > 编程语言 > java反射参数为接口

java反射参数为接口

发布时间:2023-02-02 01:40:33

『壹』 如何利用java反射构造一个类,使之实现一个接口和一些功能

可以实现,很方便。我去找个例子贴给你

Class FactoryClass = Class.forName(Name);
//Name是DAOFactory实现类的名字

// types of the constructor arguments
Class[] constrArgs = {Properties.class};

Object[] args = {Props};
//Props是Properties类型,它的内容来自一个配置文件
// get Constructor of this class with matching parameter types
Constructor<IDAOFactory> constructor = FactoryClass.getConstructor(constrArgs);

this.factory = constructor.newInstance(args);

『贰』 java中,如果一个方法A的参数是一个接口,那在主方法中怎么调用这个方法

你需要抄创建一个类,实袭现 Bsur 接口,然后创建这个类的一个实例,传给 show 方法,例如:

classAAimplementsBsur{
//实现Bsur接口的sub方法
publicvoidsub(){
System.out.println("我是sub方法。");
}
}

创建 AA 实例,传给 show 方法。

AAaa=newAA();
x.show(aa);

『叁』 java反射调用方法可以传非基本类型吗如对象、接口

可以的,参数类型是没有限制的。通过以下代码可以证明。

接口:

publicinterfaceMyInterface{
voidprint();
}

实现类:

{
@Override
publicvoidprint(){
System.out.println("interfaceImpl");
}
}

通过反射调用方法:

importjava.lang.reflect.Method;

publicclassTest{

publicstaticvoidmain(String[]args)throwsException{
Testinstance=Test.class.newInstance();
Methodmethod=Test.class.getDeclaredMethod("test",MyInterface.class);
MyInterfacemyInterface=newMyInterfaceImpl();
method.invoke(instance,myInterface);
}

publicvoidtest(MyInterfacemyInterface){
myInterface.print();
}
}

『肆』 如何利用java反射,获取属性接口的具体类

你可以这么写:
class BodyImpl implements Body{
//do something
public static void main(String[] args) {
Type[] interfaces = BodyImpl.class.getInterfaces();
ParameterizedType firstInterface = (ParameterizedType) interfaces[0];
Class c = (Class) firstInterface.getActualTypeArguments()[0];
System.out.println(c.getName()); // prints "AtomEntry"
}
}

就得到你所要的回接口参数了!答

『伍』 Java 怎么通过反射获取并实现这个类里面的接口,并且实现接口中的方法

获取当前线程的ClassLoader,通过ClassLoader获取当前工作目录,对目录下的文件进行遍历扫描。过滤出以.class为后缀的类文件,并加载类到list中,对list中所有类进行校验,判断是否为指定接口的实现类,并排除自身。返回所有符合条件的类。

这个方没有考虑不同的文件格式。当程序打成jar包,发布运行时,上述的这种遍历file的操作就失效了。只能扫描到当前方法的同级目录及其子目录。无法覆盖整个模块,遍历文件的逻辑太啰嗦,可以简化。

(5)java反射参数为接口扩展阅读:

Java使用注意事项:

1、如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件。

2、如果指定了classpath,那么会在指定的目录下查找要运行的类文件。

3、PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。

4、需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

『陆』 如何生成内部hide接口实例并通过反射作为参数进行传递

一、前言
在android系统源码中,有很多的api是隐藏的,在eclipse中通过sdk是无法访问到的。这些api有的是整个类/接口、有的是某个具体的方法、或者变量,在源码中通过文档注释内的“@hide”字符进行标识。如果我们需要去访问这些被hide的方法、类,可以采用如下两种方式:
1、在源码环境下进行访问,即将我们的工程放到源码下进行编译,这样是可以访问的;
2、通过java的反射机制

二、场景描述
这里讲述的是在eclipse下直接通过反射机制来访问系统隐藏api。举例如下:
android.app.ActivityManagerNative类定义了一个setActivityController(IActivityController watcher)方法,该方法通过参数IAcitivityController设置一个监听器,用来监听系统启动某个Activity。当系统启动某个Activity时,会调用IAcitivityController的回调方法。
在工程中可以通过获取ActivityManagerNative对象并生成一个IActivityController实例作为setActivityController()的参数传递过去,从而达到在工程中监听到系统Activity的启动。

ActivityManagerNative.java和IAcitivityController.aidl均为hide api,如下:
[java] view plain
package android.app;
/** {@hide} */
public abstract class ActivityManagerNative extends Binder implements IActivityManager{
/**
* Retrieve the system's default/global activity manager.
*/
static public IActivityManager getDefault() {
return gDefault.get();
}

public void setActivityController(IActivityController watcher) throws RemoteException{}
}

package android.app;
import android.content.Intent;
/**
* Testing interface to monitor what is happening in the activity manager
* while tests are running. Not for normal application development.
* {@hide}
*/
interface IActivityController

以上类都有“@hide”标识,所以需要通过反射的机制来进行访问。ActivityManagerNative对象可通过反射和该类的静态方法getDefault()获取到,再通过setActivityController方法设置监听器。但IActivityController也是内部hide aidl文件,如何继承该接口并实例化呢?
解决方案:把系统内的IActivityController.aidl文件在我们自己的工程里按照同样的包结构创建一份,在程序中继承该接口,在调用setActivityController时传入该实例即可。

三、实现过程
1、拷贝系统内IActivityController.aidl到工程中,与系统内该文件包结构保持一致:

2、程序中实现该接口:

[java] view plain
private class ActivityController extends IActivityController.Stub {

public boolean activityStarting(Intent intent, String pkg) {
return true;
}

public boolean activityResuming(String pkg) {
return true;
}

public int appEarlyNotResponding(String processName, int pid,
String annotation) {
return 0;
}

public boolean appCrashed(String processName, int pid, String shortMsg,
String longMsg, long timeMillis, String stackTrace) {
return false;
}

public int appNotResponding(String processName, int pid,
String processStats) {
return 0;
}
}

3、通过反射获取ActivityManagerNative对象并调用方法setActivityController进行监听器设置:
[java] view plain
private void setActivityController() {
try {
Class<?> cActivityManagerNative = Class
.forName("android.app.ActivityManagerNative");
Method mGetDefault = cActivityManagerNative.getMethod("getDefault",
null);
Object oActivityManagerNative = mGetDefault.invoke(null, null);
Class<?> i = Class.forName("android.app.IActivityController$Stub");

Method mSetActivityController = cActivityManagerNative.getMethod(
"setActivityController",
Class.forName("android.app.IActivityController"));
mSetActivityController.invoke(oActivityManagerNative,
new ActivityController());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

『柒』 java类的构造函数的参数为接口类型,如何传值

传入的参数可以是实现了Interface B的类~~~
例如~Class C implements B~
那么 new A(new C());是可以的~

『捌』 java中方法的参数可以是接口吗

可以,java方法的参数支持基本数据类型、对象、接口

『玖』 请问利用Java反射实现一个类中的接口是如何实现的呢

在理解反射的时候,不得不说一下内存。
先理解一下JVM的三个区:堆区,栈区,和方法去(静态区)。
堆区:存放所有的对象,每个对象都有一个与其对应的class信息。在JVM中只有一个堆区,堆区被所有的线程共享。
栈区:存放所有基础数据类型的对象和所有自定义对象的引用,每个线程包含一个栈区。每个栈区中的数据都是私有的,其他栈不能访问。
栈分为三部分:
基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:即静态区,被所有的线程共享。方法区包含所有的class和static变量。它们都是唯一的。

在启动一个java虚拟机时,虚拟机要加载你程序里所用到的类 ,这个进程会首先跑到jdk中(在jdk的jre/lib/ext文件夹里找那些jar文件),如果没有找到,会去classpath里设置的路径去找。
在找到要执行的类时:
1.首先将找到的类的信息加载到运行时数据区的方法区。这个过程叫做类的加载。所以一下static类型的在类的加载过程中就已经放到了方法区。所以不用实例化就能用一个static类型的方法。
2.加载完成后,在new一个类时,首先就是去方法区看看有没有这个类的信息。如果没有这个类的信息,先装载这个类。then,加载完成后,会在堆区为new的这个类分配内存,有了内存就有了实例,而这个实例指向的是方法区的该类信息。其实就是存放了在方法区的地址。而反射就是利用了这一点。

『拾』 java 利用反射调用其它项目的接口..具体点。。。谢谢。。

是其他应用的么?你用webservice呗。这个需要那个应用供应商提供给你,给你的时候会带详细的接口文档,里面会说明怎么调用,参数和返回值。

阅读全文

与java反射参数为接口相关的资料

热点内容
如何破坏文件 浏览:15
从什么网站上查找国家标准 浏览:254
iphone5s最省电的浏览器 浏览:225
用数据线如何接摄像头 浏览:110
qq手机电脑互传文件 浏览:613
linux内核升级方法 浏览:986
iphone5没有热点 浏览:189
哪里有在线幼儿c语言编程 浏览:959
iframe跨域调用js对象 浏览:178
苹果手机能分文件夹吗 浏览:679
fdb文件怎么删除里面内容 浏览:638
龙江网络配置什么路由器 浏览:169
如何使用指标导入数据 浏览:866
平时用什么app看nba 浏览:503
win10想以管理员身份运行bat文件 浏览:85
合并单元格中的其他数据如何排序 浏览:331
电脑窗口程序在哪 浏览:281
前女友把我微信删了又加什么意思 浏览:655
win10不识别无线xboxone手柄 浏览:403
汽车之家app怎么看成交价 浏览:908

友情链接