如何获取参数为Object对象的具体属性

如何获取参数为Object对象的具体属性,第1张

这个要使用反射

//Studentjava 注:里面没有写get方法,只有set方法

public class Student {

String id =null;

String name= null;

public void setId(String id) {

thisid = id;

}

public void setName(String name) {

thisname = name;

}

}

//Testjava

import javalangreflectField;

public class Test {

public static void main(String[] args) throws Exception {

Student stu = new Student();

stusetId("1");

stusetName("小明");

aa(stu);

}

public static void aa(Object obj) throws Exception {

Class clz =objgetClass();

Field[] field =clzgetDeclaredFields();

for(Field f:field)

{

String name = fgetName();

String value =(String) fget(obj);

Systemoutprintln(name+"="+value);

}

}

}

首先你要知道这两个方法是干嘛的,对吧!

首先在这个类(将定为Student)中肯定有一个属性为name。

setName 顾名思义就是给name设置一个值,也就是通过外部调用该方法给student的对象中的name赋值,所以外部方法肯定需要传入一个String作为参数。而thisname=name; 便是赋值的部分了,赋值之后不需要有返回值。

getName顾名思义便是得到name的值,也就是通过外部调用该方法得到student对象中的name的值,所以这个方法肯定要有个返回值才行,而return thisname;便是返回的部分了

对于java传递进来的java对象模型,c要加载java类的原型,根据创建相应的c对象,获取java对象的方法的id,然后调用java对象的方法。比如有个java类customer对象作为jni参数传递到c程序,customer有方法String getName()。

JNIEXPORT jobject JNICALL Java_com_oracle_estt_sc_db_impl_SCQueryODBC__1getCustomer

(JNIEnv env, jobject, jobject customer){

jmethodID methodId;

//获得customer对象的句柄

jclass cls_objClass=env->GetObjectClass(customer);

//获得customer对象中特定方法getName的id

methodId=env->GetMethodID(cls_objClass,"getName","()Ljava/lang/String;");

//调用customer对象的特定方法getName

jstring js_name=(jstring)env->CallObjectMethod(customer,methodId,NULL);

}

然后C向java传递对象方法如下:

JNIEXPORT jobject JNICALL Java_perfecter_jni_LoadJni_getJavaObj(JNIEnv env,

jobject obj){

jclass clazz=env->FindClass("perfecter/jni/MyObj");

if(clazz==0)

return 0;

jobject jobj=env->AllocObject(clazz);

jfieldID fieldId=env->GetFieldID(clazz,"name","Ljava/lang/String;");

env->SetObjectField(jobj,fieldId,env->NewStringUTF("wahaha"));

return jobj;

}

java对应的native方法申明public static native MyObj getJavaObj();

public void method(TblFwlx obj) {

Class clazz = objgetClass();

Field[] fields = objgetClass()getDeclaredFields();//获得属性

for (Field field : fields) {

PropertyDescriptor pd = new PropertyDescriptor(fieldgetName(),

clazz);

Method getMethod = pdgetReadMethod();//获得get方法

Object o = getMethodinvoke(obj);//执行get方法返回一个Object

}

}

listadd(form)吧!!!!!!!append() 是StringBuffer的方法吧!

如果form是对象,假设form是一个javaBean对象,里面有name属性。你直接用((KeyForm)listget(0))getName();就可以获取到name的值了。

方法获得的不一定是对象。

你要看返回值是什么。

bi是一个对象。

但如果你在getBookName()设置返回值为object,那么获得就是一个对象。

很显然,你在这应当设置string为返回值。string不是对象

以上就是关于如何获取参数为Object对象的具体属性全部的内容,包括:如何获取参数为Object对象的具体属性、public void setName(String name){ this.name=name; } public String getName(){ return this.name; }、java 通过jni 向 c 传递一个 java 对象, c 如何取得这个对象的属性值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9636037.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存