導航:首頁 > 編程語言 > 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反射參數為介面相關的資料

熱點內容
怎麼加入新華網的學習網站 瀏覽:26
反恐行動升級包 瀏覽:180
隱藏在電腦桌面的文件怎麼顯示 瀏覽:313
一鍵還原文件被刪除如何恢復 瀏覽:503
安卓dex文件修改 瀏覽:392
插入的pdf文件怎麼更改圖標 瀏覽:228
金華網站怎麼製作動態照片 瀏覽:704
javaparcelable 瀏覽:499
酷安app下載文件在哪裡找 瀏覽:913
微信可以發給自己文件嗎 瀏覽:449
哪個視頻網站被約談了 瀏覽:74
在vb連接mysql資料庫 瀏覽:992
一起作業家長通安卓版 瀏覽:327
nero文件名長度 瀏覽:714
word數學公式編號模板 瀏覽:588
jscriptnet 瀏覽:685
dxerror修復工具 瀏覽:293
大數據跟蹤怎麼關 瀏覽:432
製作的網頁文件在哪裡 瀏覽:361
解壓縮文件如何輸入密碼 瀏覽:746

友情鏈接