java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query

java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query,第1张

1、首先建议你不要传入到Object对象,既然你知道他们有共同的父类(假设名字叫A),那么你就应该传入到A对象。这样你就可以调用A的query方法。

2、如果你一定要用Object对象,那么,你可以

if (xxx instanceof A) {

A a = (A) xxx;

// TODO

}

在上述TODO的位置写上你要执行的 *** 作,其实就是强制类型转换。至于这个条件不满足的时候怎么 *** 作,则是你要考虑的问题了。A表示你的父类,xxx表示你传入的参数名。

这个要使用反射

//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);

}

}

}

首先说一下map,map是一种把键对象(Key)和值对象(value)映射的集合,他的每一个元素都包含一对键对象和值对象,map并没有继承collection接口(collection是最基本的集合接口,Set和List都继承了Collection,Map)。

然后hash是一种以任意长度的输入通过哈希算法转换成固定长度的输出,该输出就是哈希值。

在JDK18之前,底层是由数组加链表的方式实现的。JDK18之后又引入了红黑树。

它的put方式是先根据key通过哈希算法和与运算得到数组的下标,这时判断数组的下标位置元素是否为空。(不同的key通过哈希算法有可能得到相同的hashcode值)

如果为null,就将Key和value封装成Entry对象放入这个下标的位置。(这里说明:JDK17封装的是Entry对象,JDK18封装的是Node对象)

如果不为null:JDK17是先判断是否需要数组扩容,如果需要扩容就扩容,不需要扩容就生成Entry对象,使用头插法添加到当前位置的链表中。

JDK18因为引入了红黑树,所以先判断Node对象的类型是红黑树Node还是链表Node。

如果是红黑树Node,就需要将Key和value封装成一个红黑树节点,并且添加到红黑树中去,在添加的这个过程中要判断红黑树是否已经存在这个key,如果存在,则更新value。

如果是链表Node,就需要将Key和value封装成一个链表Node,通过尾插法插入到链表中的最后一个位置上,在使用尾插法的过程中,我们需要遍历链表,遍历的过程中,我们要判断这个链表中是否已经存在key,如果存在则更新value。若遍历完不存在当前key,就将新的链表Node插入到链表中的最后一个位置上。

然后我们需要判断链表的节点数,如果大于等于8,这个链表就会转换为红黑树,然后就将这个key和value封装成Node(红黑树节点)插入链表中。

最后我们判断是否需要扩容,不需要就结束put方法。

它的get方式是先根据key通过哈希算法和与运算得到数组的下标,这时判断数组的下标位置元素是否为空。

如果不为nul,判断key是否匹配,再判断key是否唯一,如果唯一则返回,如果不唯一则进行值判断,最后返回数据

javasqlResultSetMetaData这个类可以实现你想要的功能,看下jdk的api吧

给点提示:

先通过select from table where 1=0选出一个空的结果集,然后对此结果集使用MetaData,通过调用这个类的适当方法你就可以得到这个表的所有列名了

首先安装JDK,进入电脑的环境变量,添加一个jdk的系统变量即可,具体步骤如下:

*** 作设备:戴尔电脑

*** 作系统:win7

1、右击我的电脑点击属性。

2、进入我的电脑属性后点击高级系统设置。

3、点击进入系统环境变量。

4、新建一个jdk的环境变量。

5、名称为JAVA_HOME,变量值为jdk的安装目录。确定退出即可。

相关特点

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。

Java还剔除了C++的 *** 作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。

weex使用navigator进行页面跳转,这种方式是使用的url传参,刚开始使用的时候一直都是用下面这种方法传值:

navigatorpush({

url: configgetWeexIp() + '/app/mainjsaccount=123456&name=jelly'

})

url中?后面便是携带的参数,ccount=123456&name=jelly就是代表两个参数,一个account,一个name。

在跳转后的页面通过获取url地址,便可以得到这两个值。但和android不同的是,在ios系统中,是不支持中文的,也就是说如果url是'/app/mainjs?account=123456&name=杰尼',便会获取不到name数据,所以在最开始拼接url时需要encodeURIComponent方法转码,在拿到数据后在使用decodeURIComponent方法解码拿到正确的数据。

上面这种方法在需要传递的数据较少时很方便,但是实际开发中,数据往往都是一个json对象,需要传递的参数也很多,这样一来,url的拼接往往会变得很繁琐,因为需要将json对象中的数据单独一个一个提取出来传递例:

假如有一个json对象格式如下:

data:{

account : 123456,

name : 杰尼,

}

url就会变成:

'/app/mainjsaccount='+dataaccount+'&name='+ encodeURIComponent(dataname)

获取到url地址后需要执行下面两条语句拿到数据:

account=urlaccount

name=decodeURIComponent(urlname) //解码

这只是两条数据,如果数据有十条以上,代码会变得很冗余,出错概率也会变大。

在写项目《XXXX》时开始思考能不能和原生Android一样,将一整个对象打包传递。之后,我找到了两个函数方法:

JSONstringify() //将对象转换为json字符串

JSONparse() //将json字符串转换为对象

虽然url不支持拼接对象,但是支持字符串啊,所以我可以把url写成:

'/app/mainjsdata='+JSONstringify(data)

获取数据时:

data=JSONparse(urldata)

传递数据时,把对象转成json字符串传过去,在第二个页面获取到json字符串后,再转成对象,这样就完成了对象的传递。

需要使用account数据时,可以直接充data对象中拿:dataaccount

这种方法,代码量很少,同时也可以减少出错的概率,因为去除了抽取对象数据进行传递的步骤,避免出现参数名编写错误等bug。

但是仅仅这样也还不行,因为对象转成的json字符串中也是有可能出现中文的,比如dataname这个数据。所以同样需要做转码解码处理,最终的url:

'/app/mainjsdata='+encodeURIComponent(JSONstringify(data))

获取对象数据:

data= decodeURIComponent(JSONparse(urldata))

整个传参过程就这两行核心代码。

以上就是关于java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query全部的内容,包括:java中 怎么通过Object对象参数,获取到在传值时的不同子类里的统一方法query、如何获取参数为Object对象的具体属性、浅聊hashmap的put和get方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9581422.html

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

发表评论

登录后才能评论

评论列表(0条)

保存