package com

合集下载

Spring的AOP配置

Spring的AOP配置

Spring的AOP配置(2011-04-01 20:38:58)转载标签:分类:SSH框架springaop配置获取参数it1.先写一个普通类:package com.spring.aop;public class Common {public void execute(String username,String password){ System.out.println("------------------普通类----------------");}}2.写一个切面类,用于合法性校验和日志添加:package com.spring.aop;public class Check {public void checkValidity(){System.out.println("------------------验证合法性----------------"); }public void addLog(JoinPoint j){System.out.println("------------------添加日志----------------");Object obj[] = j.getArgs();for(Object o :obj){System.out.println(o);}System.out.println("========checkSecurity=="+j.getSignature().getName());//这个是获得方法名}}3.配置AOP,使用XML方式:(注意红色标志的内容)<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd"><bean id="common" class="mon"/><bean id="check" class="com.spring.aop.Check"/><aop:config><aop:aspect id="myAop" ref="check"><aop:pointcut id="target" expression="execution(*mon.execute(..))"/><aop:before method="checkValidity" pointcut-ref="target"/><aop:after method="addLog" pointcut-ref="target"/></aop:aspect></aop:config>注意:execution(* com.spring.aop.*.*(..))"/这样写应该就可以了这是com.aptech.jb.epet.dao.hibimpl 包下所有的类的所有方法。

设计模式之2 iterator

设计模式之2 iterator

设计模式之2 iterator模拟实现arraylist。

package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.*;publicclass ArrayList implements Collection {//初始化就是10个对象Object[] objects = new Object[10];int index = 0;publicvoid add(Object o) {//如果到达数组上限,就翻倍,并且把原数组里面的所有内容复制到新数组当中if(index == objects.length) {Object[] newObjects = new Object[objects.length * 2];System.arraycopy(objects, 0, newObjects, 0, objects.length);//最关键的一步在这里,把老数组的引用指向新数组,那么从arraylist的使用者的角度来说,是看不到内部数组翻倍了。

objects = newObjects;}objects[index] = o;index ++;}publicint size() {//返回的是数组当前的index,而不是数组的真实大小return index;}//向外提供的iteratorpublic Iterator iterator() {returnnew ArrayListIterator();}//通过一个内部类来实现iterator接口。

privateclass ArrayListIterator implements Iterator {privateint currentIndex = 0;//目前index的值大于数组的size,就没有下一个了。

publicboolean hasNext() {if(currentIndex>= index) returnfalse;elsereturntrue;}//返回当前数组对应的index处的对象,并把游标指向下一个位置public Object next() {Object o = objects[currentIndex];currentIndex ++;return o;}}}通过一个通用的接口,collection。

使用jpcap编写抓包程序

使用jpcap编写抓包程序

使用jpcap编写抓包程序大致原理:winpcap提供底层工具,我们只需要使用它的函数就可以编程,然而很繁琐。

java就再封装一层,就出现JPcap这个中间件了。

使用对比之后,JPcap尼玛不要太方便。

附:工具:winpcap要安装,这个我就不说了。

JPcap作为中间件你需要下载,我没有安装。

1.将JPcap.dll动态链接库加入到我的 C:\Program Files\Java\jdk1.7.0_71\jre\bin 中。

2.Jpacp.jar我直接外部配置路径了。

不多说,贴可用代码主程序类,用于读取网卡接口,并开多线程从各个网卡上读取包package com.sock1;import java.util.Scanner;import jpcap.JpcapCaptor;import workInterface;import jpcap.PacketReceiver;import jpcap.packet.*;/*** 使用jpcap显示网络上的各种数据包* @author */public class sock_main {private static int model;//程序启动主方法public static void main(String args[]){try{System.out.println('请输入你需要抓取的类型包:');System.out.println('TCP包输入‘1’');System.out.println('UDP包输入‘2’');System.out.println('ICMP包输入‘3’');System.out.println('ARP包输入‘4’');Scanner in=new Scanner(System.in);model = in.nextInt();//获取本机上的网络接口对象数组final NetworkInterface[] devices = JpcapCaptor.getDeviceList();for(int i=0;i<devices.length;i ){NetworkInterface nc=devices[i];//创建某个卡口上的抓取对象,最大为2000个JpcapCaptor jpcap = JpcapCaptor.openDevice(nc, 2000, true, 20);startCapThread(jpcap); //线程执行抓包System.out.println('开始抓取第' i '个卡口上的数据');}}catch(Exception ef){ef.printStackTrace();System.out.println('启动失败: ' ef);}}//将每个Captor放到独立线程中运行public static void startCapThread(final JpcapCaptorjpcap ){JpcapCaptor jp=jpcap;ng.Runnable rnner=new Runnable(){ //创建线程public void run(){//使用接包处理器循环抓包jpcap.loopPacket(-1, new TestPacketReceiver(model)); //-1无限抓取包,抓包监听器获取包}};new Thread(rnner).start();//启动抓包线程}}抓包类,实现抓包功能,并输出信息package com.sock1;import jpcap.PacketReceiver;import jpcap.packet.ARPPacket;import jpcap.packet.DatalinkPacket;import jpcap.packet.EthernetPacket;import jpcap.packet.ICMPPacket;import jpcap.packet.Packet;import jpcap.packet.TCPPacket;import jpcap.packet.UDPPacket;/*** 抓包监听器,实现PacketReceiver中的方法:打印出数据包说明*/class TestPacketReceiver implements PacketReceiver {public int model;public TestPacketReceiver (int n){this.model = n;}/*** 实现的接包方法:*/public void receivePacket(Packet packet) {//Tcp包if(packet instanceof jpcap.packet.TCPPacket && model== 1){TCPPacket p=(TCPPacket)packet;String s='TCPPacket:| 目的ip及端口 ' p.dst_ip ':' p.dst_port '|源ip及端口 ' p.src_ip ':' p.src_port' |数据长度: ' p.len;System.out.println(s);}//UDP包else if(packet instanceof jpcap.packet.UDPPacket && model== 2){UDPPacket p=(UDPPacket)packet;String s='UDPPacket:| 目的ip及端口 ' p.dst_ip ':' p.dst_port '||源ip及端口 ' p.src_ip ':' p.src_port' |数据长度: ' p.len;System.out.println(s);}//ICMPPacket包else if(packet instanceof jpcap.packet.ICMPPacket && model== 3){ICMPPacket p=(ICMPPacket)packet;//ICMP包的路由链String router_ip='';for(int i=0;i<p.router_ip.length;i ){router_ip =' ' p.router_ip[i].getHostAddress();}String s='@ @ @ ICMPPacket:| 路由IP: ' router_ip' |redir_ip: ' p.redir_ip' |最大传输单元: ' p.mtu' |长度: ' p.len;System.out.println(s);}//ARP请求包else if(packet instanceof jpcap.packet.ARPPacket && model== 4){ARPPacket p=(ARPPacket)packet;//Returns the hardware address (MAC address) of the senderObject saa= p.getSenderHardwareAddress();Object taa=p.getT argetHardwareAddress();String s='* * * ARPPacket:| 发送硬件地址: ' saa'|目标硬件地址: ' taa' |长度: ' p.len;System.out.println(s);}//取得链路层数据头 :如果你想局网抓包或伪造数据包,嘿嘿DatalinkPacket datalink =packet.datalink;//如果是以太网包if(datalink instanceof jpcap.packet.EthernetPacket){ EthernetPacket ep=(EthernetPacket)datalink; String s=' 以太包: ''|目的MAC: ' ep.getDestinationAddress()'|源MAC: ' ep.getSourceAddress();System.out.println(s);}}}。

app开发快速理解——推送通知小红点角标

app开发快速理解——推送通知小红点角标

app开发快速理解——推送通知⼩红点⾓标package com.example.chapter11;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.Build;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.chapter11.util.ViewUtil;public class NotifySimpleActivity extends AppCompatActivity implements View.OnClickListener {private EditText et_title;private EditText et_message;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_notify_simple);et_title = findViewById(R.id.et_title);et_message = findViewById(R.id.et_message);findViewById(R.id.btn_send_simple).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_send_simple) {ViewUtil.hideOneInputMethod(this, et_message); // 隐藏输⼊法软键盘if (TextUtils.isEmpty(et_title.getText())) {Toast.makeText(this, "请填写消息标题", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(et_message.getText())) {Toast.makeText(this, "请填写消息内容", Toast.LENGTH_SHORT).show();return;}String title = et_title.getText().toString();String message = et_message.getText().toString();sendSimpleNotify(title, message); // 发送简单的通知消息}}// 发送简单的通知消息(包括消息标题和消息内容)private void sendSimpleNotify(String title, String message) {// 发送消息之前要先创建通知渠道,创建代码见MainApplication.java// 创建⼀个跳转到活动页⾯的意图Intent clickIntent = new Intent(this, MainActivity.class);// 创建⼀个⽤于页⾯跳转的延迟意图PendingIntent contentIntent = PendingIntent.getActivity(this,R.string.app_name, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);// 创建⼀个通知消息的建造器Notification.Builder builder = new Notification.Builder(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// Android 8.0开始必须给每个通知分配对应的渠道builder = new Notification.Builder(this, getString(R.string.app_name));}builder.setContentIntent(contentIntent) // 设置内容的点击意图.setAutoCancel(true) // 点击通知栏后是否⾃动清除该通知.setSmallIcon(R.mipmap.ic_launcher) // 设置应⽤名称左边的⼩图标.setSubText("这⾥是副本") // 设置通知栏⾥⾯的附加说明⽂本// 设置通知栏右边的⼤图标.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_app)).setContentTitle(title) // 设置通知栏⾥⾯的标题⽂本.setContentText(message); // 设置通知栏⾥⾯的内容⽂本Notification notify = builder.build(); // 根据通知建造器构建⼀个通知对象// 从系统服务中获取通知管理器NotificationManager notifyMgr = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);// 使⽤通知管理器推送通知,然后在⼿机的通知栏就会看到该消息notifyMgr.notify(R.string.app_name, notify);}}package com.example.chapter11;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.Build;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.chapter11.util.ViewUtil;public class NotifyCounterActivity extends AppCompatActivity implements View.OnClickListener { private EditText et_title;private EditText et_message;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_notify_counter);et_title = findViewById(R.id.et_title);et_message = findViewById(R.id.et_message);findViewById(R.id.btn_send_counter).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_send_counter) {ViewUtil.hideOneInputMethod(this, et_message); // 隐藏输⼊法软键盘if (TextUtils.isEmpty(et_title.getText())) {Toast.makeText(this, "请填写消息标题", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(et_message.getText())) {Toast.makeText(this, "请填写消息内容", Toast.LENGTH_SHORT).show();return;}String title = et_title.getText().toString();String message = et_message.getText().toString();sendCounterNotify(title, message); // 发送计时的通知消息}}// 发送计时的通知消息private void sendCounterNotify(String title, String message) {// 发送消息之前要先创建通知渠道,创建代码见MainApplication.java// 创建⼀个跳转到活动页⾯的意图Intent cancelIntent = new Intent(this, MainActivity.class);// 创建⼀个⽤于页⾯跳转的延迟意图PendingIntent deleteIntent = PendingIntent.getActivity(this,R.string.app_name, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT);// 创建⼀个通知消息的建造器Notification.Builder builder = new Notification.Builder(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// Android 8.0开始必须给每个通知分配对应的渠道builder = new Notification.Builder(this, getString(R.string.app_name));}builder.setDeleteIntent(deleteIntent) // 设置内容的清除意图.setSmallIcon(R.mipmap.ic_launcher) // 设置应⽤名称左边的⼩图标// 设置通知栏右边的⼤图标.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_app)).setProgress(100, 60, false) // 设置进度条及其具体进度.setUsesChronometer(true) // 设置是否显⽰计时器.setContentTitle(title) // 设置通知栏⾥⾯的标题⽂本.setContentText(message); // 设置通知栏⾥⾯的内容⽂本Notification notify = builder.build(); // 根据通知建造器构建⼀个通知对象// 从系统服务中获取通知管理器NotificationManager notifyMgr = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);// 使⽤通知管理器推送通知,然后在⼿机的通知栏就会看到该消息notifyMgr.notify(R.string.app_name, notify);}}package com.example.chapter11.util;import android.annotation.TargetApi;import android.app.Notification;import android.app.NotificationChannel;import android.app.NotificationManager;import android.content.Context;import .Uri;import android.os.Build;import android.os.Bundle;import android.util.Log;import com.example.chapter11.BuildConfig;import ng.reflect.Field;import ng.reflect.Method;public class NotifyUtil {private final static String TAG = "NotifyUtil";@TargetApi(Build.VERSION_CODES.O)// 创建通知渠道。

java中package(包)的使用理解

java中package(包)的使用理解

java中package(包)的使用理解Java中package(包)的使用理解在Java中,package(包)是一种用于组织类和接口的机制。

它可以将相关的类和接口放在同一个包中,以便于管理和使用。

本文将从类的角度出发,介绍Java中package的使用理解。

一、包的概念在Java中,包是一种用于组织类和接口的机制。

它可以将相关的类和接口放在同一个包中,以便于管理和使用。

包的命名规则是以域名反转的形式命名的,例如:com.example.package。

二、包的作用1. 避免命名冲突在Java中,每个类都有一个唯一的全名,包的命名规则可以避免不同的类之间出现命名冲突的问题。

2. 组织类和接口包可以将相关的类和接口放在同一个包中,以便于管理和使用。

3. 访问控制包可以控制类和接口的访问权限,只有在同一个包中的类和接口才能相互访问。

三、包的使用1. 声明包在Java中,声明包的语法是在每个源文件的第一行添加package语句,例如:```package com.example.package;```2. 导入包在Java中,如果要使用其他包中的类或接口,需要使用import语句将其导入到当前的包中,例如:```import com.example.package.ClassName;```3. 访问包中的类和接口在Java中,访问同一个包中的类和接口可以直接使用类名或接口名,例如:```ClassName obj = new ClassName();```访问其他包中的类和接口需要使用包名加点的方式,例如:```com.example.package.ClassName obj = newcom.example.package.ClassName();```四、包的分类在Java中,包可以按照功能或者层次进行分类,例如:1. java包Java API中的核心类和接口都在java包中,例如ng、java.util等。

企业管理源代码

企业管理源代码

DeptMob类package com.upc.dao;public class DeTran {private String deNum;private String deName;private String stNum;private String stName;public String getDeNum() {return deNum;}public void setDeNum(String deNum) {this.deNum = deNum;}public String getDeName() {return deName;}public void setDeName(String deName) { this.deName = deName;}public String getStNum() {return stNum;}public void setStNum(String stNum) {this.stNum = stNum;}public String getStName() {return stName;}public void setStName(String stName) { this.stName = stName;}}DeptMob2类package com.upc.dao;public class DeInTran {private String deTranStNum;//员工编号private String deTranStName;//员工姓名private String deTranOldDe;//原部门private String deTranNewDe;//现部门private String deTranType;//部门类型private String deTranReason;//调转原因private String deTranNote;//备注private String deTranDate;//调转日期public String getDeTranStNum() {return deTranStNum;}public void setDeTranStNum(String deTranStNum) { this.deTranStNum = deTranStNum;}public String getDeTranStName() {return deTranStName;}public void setDeTranStName(String deTranStName) { this.deTranStName = deTranStName;}public String getDeTranOldDate() {return deTranOldDe;}public void setDeTranOldDe(String deTranOldDe) { this.deTranOldDe = deTranOldDe;}public String getDeTranNewDe() {return deTranNewDe;}public void setDeTranNewDe(String deTranNewDe) { this.deTranNewDe = deTranNewDe;}public String getDeTranType() {return deTranType;}public void setDeTranType(String deTranType) {this.deTranType = deTranType;}public String getDeTranReason() {return deTranReason;}public void setDeTranReason(String deTranReason) { this.deTranReason = deTranReason;}public String getDeTranNote() {return deTranNote;}public void setDeTranNote(String deTranNote) {this.deTranNote = deTranNote;}public String getDeTranDate() {return deTranDate;}public void setDeTranDate(String deTranDate) {this.deTranDate = deTranDate;}}DeptMob3类package com.upc.dao;public class DeSeTran {private String deTranStNum;//员工编号private String deTranStName;//员工姓名private String deTranOldDe;//原部门private String deTranNewDe;//现部门private String deTranType;//部门类型private String deTranReason;//调转原因private String deTranNote;//备注private String deTranDate;//调转日期public String getDeTranStNum() {return deTranStNum;}public void setDeTranStNum(String deTranStNum) { this.deTranStNum = deTranStNum;}public String getDeTranStName() {return deTranStName;}public void setDeTranStName(String deTranStName) { this.deTranStName = deTranStName;}public String getDeTranOldDate() {return deTranOldDe;}public void setDeTranOldDe(String deTranOldDe) { this.deTranOldDe = deTranOldDe;}public String getDeTranNewDe() {return deTranNewDe;}public void setDeTranNewDe(String deTranNewDe) { this.deTranNewDe = deTranNewDe;}public String getDeTranType() {return deTranType;}public void setDeTranType(String deTranType) {this.deTranType = deTranType;}public String getDeTranReason() {return deTranReason;}public void setDeTranReason(String deTranReason) { this.deTranReason = deTranReason;}public String getDeTranNote() {return deTranNote;}public void setDeTranNote(String deTranNote) {this.deTranNote = deTranNote;}public String getDeTranDate() {return deTranDate;}public void setDeTranDate(String deTranDate) {this.deTranDate = deTranDate;}}DeptMobDao接口package com.upc.dao;import java.util.List;public interface DeTranDao {List<DeTran>getDeTran(String deNum,String deName,String stNum,String stName);//四个参数}DeptMobDao2接口package com.upc.dao;public interface DeInTranDao {void insertDeTran(DeInTran deInTran);}package com.upc.dao;import java.util.List;DeptMobDao3接口public interface DeSeTranDao {List<DeSeTran> getDeSeTran(String deTranFromDate,String deTranToDate, String deTranStNum,String deTranStName,String deTranType);//五个参数}DeptMobDaoImpl接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.upc.utils.DbUtils;public class DeTranDaoImp implements DeTranDao {public List<DeTran> getDeTran(String deNum, String deName,String stNum, String stName) {Connection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<DeTran> deTrans =new ArrayList<DeTran>();try{conn = DbUtils.getConnection();StringBuffer sb=new StringBuffer("");sb.append("select DeNum,DeName,StaffNumber,StaffName from Department,Staff where DeNum=StaffDeNum and StaffIsEmpty='在职'") ;if(deNum!=null&&deNum.length()!=0){sb.append(" and DeNum='"+deNum+"'");}if(deName!=null&&deName.length()!=0){sb.append(" and DeName='"+deName+"'");}if(stNum!=null&&stNum.length()!=0){sb.append(" and StaffNumber='"+stNum+"'");}if(stName!=null&&stName.length()!=0){sb.append(" and StaffName='"+stName+"'");}pstmt = conn.prepareStatement(sb.toString());rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs对象中//System.out.println("rs="+rs);//System.out.println(sb);while(rs.next()){DeTran deptMob = new DeTran();deptMob.setDeNum(rs.getString("DeNum"));deptMob.setDeName(rs.getString("DeName"));deptMob.setStNum(rs.getString("StaffNumber"));deptMob.setStName(rs.getString("StaffName"));deTrans.add(deptMob);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return deTrans;}}DeptMobDaoImpl2接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.List;import com.upc.utils.DbUtils;public class DeInTranDaoImp implements DeInTranDao {public void insertDeTran(DeInTran deInTran) {Connection conn = null;PreparedStatement pstmt = null;Connection connect= null;PreparedStatement pdstmt = null;try {conn = DbUtils.getConnection();connect = DbUtils.getConnection();String sql = "insert into DeTranMessage(DeTranStaffNum,DeTranOldDe,DeTranNewDe,DeTranType,DeTranReason,DeTran Note,DeTranDate) values(?,?,?,?,?,?,?)";String sqlList = "update Staff set StaffDeNum='"+deInTran.getDeTranNewDe()+"'where StaffNumber='"+deInTran.getDeTranStNum()+"'";// System.out.println(sqlList);pstmt = conn.prepareStatement(sql);pdstmt = connect.prepareStatement(sqlList);pstmt.setString(1, deInTran.getDeTranStNum());pstmt.setString(2, deInTran.getDeTranOldDate());pstmt.setString(3, deInTran.getDeTranNewDe());pstmt.setString(4, deInTran.getDeTranType());pstmt.setString(5, deInTran.getDeTranReason());pstmt.setString(6, deInTran.getDeTranNote());pstmt.setString(7, deInTran.getDeTranDate());pdstmt.executeUpdate();pstmt.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DbUtils.closePreparedStatement(pstmt);DbUtils.closePreparedStatement(pdstmt);DbUtils.closeConnection();}}}DeptMobDaoImpl3接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.upc.utils.DbUtils;public class DeSeTranDaoImp implements DeSeTranDao { public List<DeSeTran> getDeSeTran(String deTranFromDate,String deTranToDate, String deTranStNum,String deTranStName, String deTranType) {Connection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<DeSeTran> deSeTrans =new ArrayList<DeSeTran>();System.out.println("开始时间:"+deTranFromDate);System.out.println("结束时间:"+deTranToDate);try{conn = DbUtils.getConnection();StringBuffer sb=new StringBuffer("");sb.append(" select DeTranStaffNum,StaffName,DeTranOldDe,"+"DeTranNewDe,DeTranType,DeTranReason,"+"DeTranNote,DeTranDate from DeTranMessage,Staff" +" where StaffNumber=DeTranStaffNum") ;System.out.println("不加任何条件的语句"+sb);if(deTranFromDate!=null&&deTranFromDate.length()!=0){sb.append(" and DeTranDate>'"+deTranFromDate+"' ");}System.out.println("开始时间:"+sb);if(deTranToDate!=null&&deTranToDate.length()!=0){sb.append("and DeTranDate<'"+deTranToDate+"'");}System.out.println("结束时间:"+sb);if(deTranStNum!=null&&deTranStNum.length()!=0){sb.append(" and DeTranStaffNum='"+deTranStNum+"'");}System.out.println("员工编号:"+sb);if(deTranStName!=null&&deTranStName.length()!=0){sb.append(" and StaffName='"+deTranStName+"'");}System.out.println("员工姓名:"+sb);if(deTranType!=null&&deTranType.length()!=0){sb.append(" and DeTranType='"+deTranType+"'");}System.out.println("跳转类型:"+sb);pstmt = conn.prepareStatement(sb.toString());rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs对象中//System.out.println("rs="+rs);System.out.println(sb);while(rs.next()){DeSeTran deSeTran = new DeSeTran();deSeTran.setDeTranOldDe(rs.getString("DeTranOldDe"));deSeTran.setDeTranDate(rs.getString("DeTranDate"));deSeTran.setDeTranNewDe(rs.getString("DeTranNewDe"));deSeTran.setDeTranStNum(rs.getString("DeTranStaffNum"));deSeTran.setDeTranStName(rs.getString("StaffName"));deSeTran.setDeTranReason(rs.getString("DeTranReason"));deSeTran.setDeTranNote(rs.getString("DeTranNote"));deSeTran.setDeTranType(rs.getString("DeTranType"));deSeTrans.add(deSeTran);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return deSeTrans;}}JobMob类package com.upc.dao;public class PoTran {private String deNum;private String deName;private String stNum;private String stName;private String poNum;public String getPoNum() {return poNum;}public void setPoNum(String poNum) {this.poNum = poNum;}public String getDeNum() {return deNum;public void setDeNum(String deNum) {this.deNum = deNum;}public String getDeName() {return deName;}public void setDeName(String deName) { this.deName = deName;}public String getStNum() {return stNum;}public void setStNum(String stNum) {this.stNum = stNum;}public String getStName() {return stName;}public void setStName(String stName) { this.stName = stName;}}JobMob2类package com.upc.dao;public class PoInTran {private String deName;//部门名称private String stNum;//员工编号private String stName;//员工姓名private String poOld;//原岗位private String poNew;//现岗位private String potType;//调转类型private String potReason;//原因private String potDate;//日期private String potNote;//备注public String getDeName() {return deName;public void setDeName(String deName) { this.deName = deName;}public String getStNum() {return stNum;}public void setStNum(String stNum) {this.stNum = stNum;}public String getStName() {return stName;}public void setStName(String stName) { this.stName = stName;}public String getPoOld() {return poOld;}public void setPoOld(String poOld) {this.poOld = poOld;}public String getPoNew() {return poNew;}public void setPoNew(String poNew) {this.poNew = poNew;}public String getPotType() {return potType;}public void setPotType(String potType) { this.potType = potType;}public String getPotReason() {return potReason;}public void setPotReason(String potReason) { this.potReason = potReason;}public String getPotDate() {return potDate;}public void setPotDate(String potDate) {this.potDate = potDate;}public String getPotNote() {return potNote;}public void setPotNote(String potNote) {this.potNote = potNote;}}PoSeTranpackage com.upc.dao;public class PoSeTran {private String poTranDeName;private String poTranStNum;private String poTranStName;private String poTranBefore;private String poTranNow;private String poTranType;private String poTranReason;private String poTranDate;private String poTranNote;public String getPoTranDeName() {return poTranDeName;}public void setPoTranDeName(String poTranDeName) { this.poTranDeName = poTranDeName;}public String getPoTranStNum() {return poTranStNum;}public void setPoTranStNum(String poTranStNum) { this.poTranStNum = poTranStNum;}public String getPoTranStName() {return poTranStName;}public void setPoTranStName(String poTranStName) { this.poTranStName = poTranStName;}public String getPoTranBefore() {return poTranBefore;}public void setPoTranBefore(String poTranBefore) { this.poTranBefore = poTranBefore;}public String getPoTranNow() {return poTranNow;}public void setPoTranNow(String poTranNow) {this.poTranNow = poTranNow;}public String getPoTranType() {return poTranType;}public void setPoTranType(String poTranType) {this.poTranType = poTranType;}public String getPoTranReason() {return poTranReason;}public void setPoTranReason(String poTranReason) { this.poTranReason = poTranReason;}public String getPoTranDate() {return poTranDate;}public void setPoTranDate(String poTranDate) {this.poTranDate = poTranDate;}public String getPoTranNote() {return poTranNote;}public void setPoTranNote(String poTranNote) {this.poTranNote = poTranNote;}}JobMobDao接口package com.upc.dao;import java.util.List;public interface PoTranDao {List<PoTran>getPoTran(String deNum,String deName,String stNum,String stName,String poNum);}JobMobDao2接口package com.upc.dao;public interface PoInTranDao {void insertPoTran(PoInTran poInTran);}JobMobDao3接口package com.upc.dao;import java.util.List;public interface poSeTranDao {List<PoSeTran> getPoSeTranDao(String poTranFromDate,String poTranToDate, String poTranStNum,String poTranStName,String poTranType);//五个参数}JobMobDaoImpl接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.upc.utils.DbUtils;public class PoTranDaoImp implements PoTranDao {@Overridepublic List<PoTran> getPoTran(String deNum, String deName,String stNum, String stName,String poNum) {// TODO Auto-generated method stubConnection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<PoTran> PoTrans =new ArrayList<PoTran>();try{conn = DbUtils.getConnection();StringBuffer sb=new StringBuffer("");sb.append("select DeNum,DeName,StaffPoNum,StaffNumber,StaffName"+" from Department,Staff"+" where DeNum=StaffDeNum and StaffIsEmpty='在职'") ;if(deNum!=null&&deNum.length()!=0){sb.append(" and DeNum='"+deNum+"'");}if(deName!=null&&deName.length()!=0){sb.append(" and DeName='"+deName+"'");}if(stName!=null&&stName.length()!=0){sb.append(" and StaffName='"+stName+"'");}if(stNum!=null&&stNum.length()!=0){sb.append(" and StaffNumber='"+stNum+"'");}if(poNum!=null&&poNum.length()!=0){sb.append(" and StaffPoNum='"+poNum+"'");}// System.out.println(sb);pstmt = conn.prepareStatement(sb.toString());rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs对象中// System.out.println("rs="+rs);//System.out.println(sb);while(rs.next()){PoTran poTran = new PoTran();poTran.setDeNum(rs.getString("DeNum"));poTran.setDeName(rs.getString("DeName"));poTran.setStNum(rs.getString("StaffNumber"));poTran.setStName(rs.getString("StaffName"));poTran.setPoNum(rs.getString("StaffPoNum"));PoTrans.add(poTran);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return PoTrans;}}JobMobDaoImpl2接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import com.upc.utils.DbUtils;public class PoInTranDaoImp implements PoInTranDao {@Overridepublic void insertPoTran(PoInTran poInTran) {// TODO Auto-generated method stubConnection conn = null;PreparedStatement pstmt = null;Connection connect= null;PreparedStatement pdstmt = null;try {conn = DbUtils.getConnection();connect = DbUtils.getConnection();String sql = "insert intoPosition(PoTranStaffNum,PoTranOldPo,PoTranNewPo,PoTranType,PoTranReason,PoTranNote,PoTr anDate) values(?,?,?,?,?,?,?)";String sqlList = "update Staff set StaffPoNum='"+poInTran.getPoNew()+"' where StaffNumber='"+poInTran.getStNum()+"'";System.out.println(sql);System.out.println(sqlList);pstmt = conn.prepareStatement(sql);pdstmt = connect.prepareStatement(sqlList);pstmt.setString(1, poInTran.getStNum());pstmt.setString(2, poInTran.getPoOld());pstmt.setString(3, poInTran.getPoNew());pstmt.setString(4, poInTran.getPotType());pstmt.setString(5, poInTran.getPotReason());pstmt.setString(6, poInTran.getPotNote());pstmt.setString(7, poInTran.getPotDate());pdstmt.executeUpdate();pstmt.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DbUtils.closePreparedStatement(pstmt);DbUtils.closePreparedStatement(pdstmt);DbUtils.closeConnection();}}}JobMobDapImpl3接口类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.upc.dao.PoSeTran;import com.upc.dao.poSeTranDao;import com.upc.utils.DbUtils;public class PoSeTranDaoImp implements poSeTranDao {public List<PoSeTran> getPoSeTranDao(String poTranFromDate,String poTranToDate, String poTranStNum,String poTranStName, String poTranType) {Connection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<PoSeTran> jobMobs3 = new ArrayList<PoSeTran>();// System.out.println("开始时间:"+poTranFromDate);// System.out.println("结束时间:"+poTranToDate);try{conn = DbUtils.getConnection();StringBuffer sb=new StringBuffer("");sb.append(" select PoTranStaffNum,StaffName,PoTranOldPo,"+"PoTranNewPo,PoTranType,PoTranReason,"+"PoTranNote,PoTranDate,DeName from Position,Staff" +" where StaffNumber=PoTranStaffNum and DeNum=StaffDeNum") ;System.out.println("不加任何条件的语句:"+sb);if(poTranFromDate!=null&&poTranFromDate.length()!=0){sb.append(" and DeTranDate>'"+poTranFromDate+"' ");}// System.out.println("开始时间:"+sb);if(poTranToDate!=null&&poTranToDate.length()!=0){sb.append("and DeTranDate<'"+poTranToDate+"'");}// System.out.println("结束时间:"+sb);if(poTranStNum!=null&&poTranStNum.length()!=0){sb.append(" and DeTranStaffNum='"+poTranStNum+"'");}// System.out.println("员工编号:"+sb);//姓名在表中没有,怎么办可以利用传过来的参数Name进行处理问题暂存if(poTranStName!=null&&poTranStName.length()!=0){sb.append(" and StaffName='"+poTranStName+"'");}// System.out.println("员工姓名:"+sb);if(poTranType!=null&&poTranType.length()!=0){sb.append(" and DeTranType='"+poTranType+"'");}// System.out.println("跳转类型:"+sb);pstmt = conn.prepareStatement(sb.toString());rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs 对象中// System.out.println("rs="+rs);// System.out.println(sb);while(rs.next()){PoSeTran jobMob3 = new PoSeTran();jobMob3.setPoTranBefore(rs.getString("PoTranOldPo"));jobMob3.setPoTranDate(rs.getString("PoTranDate"));jobMob3.setPoTranDeName(rs.getString("DeName"));jobMob3.setPoTranNow(rs.getString("PoTranNewPo"));jobMob3.setPoTranStName(rs.getString("StaffName"));jobMob3.setPoTranStNum(rs.getString(" PoTranStaffNum"));jobMob3.setPoTranReason(rs.getString("PoTranReason"));jobMob3.setPoTranNote(rs.getString("PoTranNote"));jobMob3.setPoTranType(rs.getString("PoTranType"));jobMobs3.add(jobMob3);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return jobMobs3;}SelectDept类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.upc.utils.DbUtils;public class QueryDe {public List<String> getDeTran() {Connection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<String> deTrans =new ArrayList<String>();try{conn = DbUtils.getConnection();String sql="select DeNum from Department";pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs对象中//System.out.println("rs="+rs);//System.out.println(sb);while(rs.next()){String dept = new String();dept = rs.getString("DeNum");deTrans.add(dept);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return deTrans;}}SelectPos类package com.upc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.upc.utils.DbUtils;public class QueryPo {public List<String> getPosMob() {Connection conn= null;PreparedStatement pstmt=null;ResultSet rs=null;List<String> poTrans =new ArrayList<String>();try{conn = DbUtils.getConnection();String sql="select poNum from Position";pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery(); //执行sql语句,然后将数据库结果放在rs对象中//System.out.println("rs="+rs);//System.out.println(sb);while(rs.next()){String pos = new String();pos = rs.getString("poNum");poTrans.add(pos);}}catch(Exception e){e.printStackTrace();}finally{DbUtils.closeResultSet(rs);DbUtils.closePreparedStatement(pstmt);DbUtils.closeConnection();}return poTrans;}}Test类package com.upc.dao;import java.util.List;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubDeTranDao toDeTranDao= new DeTranDaoImp();List <DeTran> deTrans=toDeTranDao.getDeTran(null, null, null, null);for(DeTran de:deTrans){System.out.println(de.getStName());}}}Service层DeptMobService接口package com.upc.service;import java.util.List;import com.upc.dao.DeTran;public interface DeTranService {List<DeTran>getDeTran(String deNum,String deName,String stNum,String stName);//四个参数}DeptMobService2接口package com.upc.service;import com.upc.dao.DeInTran;public interface DeInTranService {void insertDeTran(DeInTran deInTran);}DeptMobService3接口package com.upc.service;import java.util.List;import com.upc.dao.DeSeTran;public interface DeSeTranService {List<DeSeTran> getDeSeTran(String deTranFromDate,String deTranToDate, String deTranStNum,String deTranStName,String deTranType);//五个参数}DeptMobServiceImpl接口类package com.upc.service;import java.util.List;import com.upc.dao.DeTran;import com.upc.dao.DeTranDao;import com.upc.dao.DeTranDaoImp;public class DeTranServiceImp implements DeTranService {@Overridepublic List<DeTran> getDeTran(String deNum, String deName,String stNum, String stName) {// TODO Auto-generated method stubDeTranDao deTranDao = new DeTranDaoImp();return deTranDao.getDeTran(deNum, deName, stNum, stName);}}DeptMobServiceImpl2接口类package com.upc.service;import com.upc.dao.DeInTran;import com.upc.dao.DeInTranDao;import com.upc.dao.DeInTranDaoImp;public class DeInTranServiceImp implements DeInTranService {@Overridepublic void insertDeTran(DeInTran deInTran) {// TODO Auto-generated method stubDeInTranDao deTranDao = new DeInTranDaoImp();deTranDao.insertDeTran(deInTran);}}DeptMobServiceImpl3接口类package com.upc.service;import java.util.List;import com.upc.dao.DeSeTran;import com.upc.dao.DeTranDao;import com.upc.dao.DeSeTranDao;import com.upc.dao.DeSeTranDaoImp;public class DeSeTranServiceImp implements DeSeTranService {@Overridepublic List<DeSeTran> getDeSeTran(String deTranFromDate,String deTranToDate, String deTranStNum,String deTranStName, String deTranType) {// TODO Auto-generated method stubDeSeTranDao deTranDao = new DeSeTranDaoImp();return deTranDao.getDeSeTran(deTranFromDate, deTranToDate, deTranStNum, deTranStName, deTranType);}}JobMobService接口package com.upc.service;import java.util.List;import com.upc.dao.PoTran;public interface PoTranService {List<PoTran>getPoTran(String deNum,String deName,String stNum,String stName,String poNum);//5个参数}JobMobService2接口package com.upc.service;import com.upc.dao.PoInTran;public interface PoInTranService {void insertPoTran(PoInTran poInTran);}JobMobService3接口package com.upc.service;import java.util.List;import com.upc.dao.PoSeTran;public interface PoSeTranService {List<PoSeTran> getPoSeTranDao(String poTranFromDate,String poTranToDate, String poTranStNum,String poTranStName,String poTranType);//五个参数}JobMobServiceImpl接口类package com.upc.service;import java.util.List;import com.upc.dao.PoTranDao;import com.upc.dao.PoTranDaoImp;import com.upc.dao.PoTran;public class PoTranServiceImp implements PoTranService {public List<PoTran> getPoTran(String deNum, String deName,String stNum, String stName,String poNum) {// TODO Auto-generated method stubPoTranDao poTranDao = new PoTranDaoImp();return poTranDao.getPoTran(deNum, deName, stNum, stName,poNum);。

package resolutions的用法

package resolutions的用法

package resolutions的用法在Java语言中,我们可以使用包(package)来组织和管理代码,将相关的类和接口放在同一个包中,方便代码的维护和管理。

而在包内部,我们也可以使用“package resolutions”来解决类之间的命名冲突问题。

本文将介绍package resolutions的用法和实例。

一、什么是package resolutions在Java的包中,可以定义多个具有相同名称的类或接口。

这些类或接口可能来自不同的包,但它们的名称完全相同。

这种情况下,就会发生冲突,编译器无法准确地判断应该使用哪一个类或接口。

为了解决这个问题,Java提供了包名解析(package resolutions)机制。

它通过包名的全称来指定所需的类或接口,以避免冲突。

下面将详细介绍package resolutions的用法。

二、使用package resolutions在使用package resolutions时,我们需要使用类的全限定名(fully qualified name)。

类的全限定名由包名和类名组成,中间使用`.`进行分隔。

例如,对于一个名为`com.example.MyClass`的类,它的全限定名为`com.example.MyClass`。

下面是一个示例,演示了如何使用package resolutions来解决冲突问题。

```java// 使用包名解析方式来引用MyClass类com.example.MyClass myObject = new com.example.MyClass();```在上述示例中,我们使用了全限定名`com.example.MyClass`来指定要使用的类。

这样,即使存在其他包中同名的类,编译器也能正确地解析出我们需要的类。

三、实例为了更好地理解package resolutions的使用,假设我们有两个同名的类,分别位于不同的包中。

java中package用法

java中package用法

java中package用法Java中的Package是一个重要的概念,用于将相关的类、接口和枚举组织在一起。

本文将介绍Package的概念、作用和用法。

1. 概念Package是Java中用来组织和管理类、接口和枚举的一种机制,是构建Java应用程序的关键部分之一。

每个Java源文件都必须包含一个package的声明,声明语句的通用格式如下:package package_name;在Java中,每个类都必须属于一个包,一个包中可以包含多个类、接口和枚举,这些类、接口和枚举在同一个包中可以共享访问权限。

2. 作用Package的作用有以下几个方面:(1)组织和管理类、接口和枚举。

Package的最基本作用就是组织和管理Java中的类、接口和枚举。

通过将相关的类、接口和枚举放到一个包中,可以使代码更加有结构、易于维护。

(2)避免命名冲突。

由于Java中的每个类都必须属于一个包,因此通过包名可以避免与其他类、接口或枚举的名称发生冲突。

不同的包中可以存在同名的类,但是这些类的全限定名必须不同。

(3)控制访问权限。

通过定义类的访问控制符,可以控制类、接口和枚举的可见性范围。

在同一个包中的类可以共享访问权限,而在不同的包中的类必须通过import语句引入才能使用。

(4)提高代码的复用性。

Package可以将相关的代码组织在一起,使得代码更易于复用。

通过定义一个公共的Package,可以方便地跨项目共享代码。

(5)方便IDE的管理。

将类、接口和枚举组织在不同的Package中,可以使IDE更加方便地管理代码,如查找和重构等。

3. 用法(1)声明Package在Java中,声明Package的语句必须放在Java源文件的首行,格式如下:其中,package_name可以是单个标识符,也可以是以点号分隔的多个标识符,例如:package com.example.project.utils;在Java中,每个类都必须属于一个Package,可以使用定义类时的关键字package来指定类所属的Package,如下所示:public class UserDao {// 类定义}这样,就定义了一个名为UserDao的类,它属于com.example.project.dao这个Package。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package com.fs;
import java.util.Random;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.DataSetObserver;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private ListView list;

private String[] arr = {"13254564"," 135564654
","135564654","135564654","135564654","135564654","135564654","135564654","135564654"
,"135564654","135564654","135564654","135564654","135564654","135564654","135564654",
"135564654","135564654","135564654","135564654","135564654","135564654","135564654","
135564654","135564654","135564654","135564654","135564654","135564654","135564654","1
35564654"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.list);
//将数据加入到列表的每一项
list.setAdapter(new MyAdapter());
//给列表添加监听器
list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView parent, View view,
int position, long id) {

//取出这个列表被点击项的电话号码方式2
// String str = arr[position];
// Toast.makeText(MainActivity.this, str, 0).show();

//取出这个列表被点击项的电话号码方式2
TextView tv = (TextView) view.findViewById(R.id.textView1);
String number = tv.getText().toString().trim();
Toast.makeText(MainActivity.this, number, 0).show();

//拨打电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
});
}

class MyAdapter extends BaseAdapter {
//列表调用这个函数时,可以清楚这个列表到底有多少项需要显示
@Override
public int getCount() {
System.out.println("getCount");
return arr.length;
}

@Override
public Object getItem(int position) {

return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

//当列表需要显示时,他就将这个函数的返回值显示到列表每一项里面
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//将提前已经准备好的xml创建成view对象
System.out.println("getView");
LayoutInflater inflater = (LayoutInflater)
getSystemService(LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.items, null);

//取出提前准备好的xml中的每一个子元素,并添加数据
TextView tv1 = (TextView) v.findViewById(R.id.textView1);
TextView tv2 = (TextView) v.findViewById(R.id.textView2);
//new Random().nextInt(10000) 产生0到一万的随机整数
tv1.setText(arr[position]);

//返回xml创建成的对象
return v;
}
}
}

相关文档
最新文档