java向接口传参_Java接口实现传参

这篇博客展示了如何在Java中使用接口进行方法传参并实现多态特性。通过创建Livingable和ThinkAble接口,以及Dog和People类来实现这两个接口。Service类作为服务类,接收实现了接口的对象并调用它们的方法。在MainEnter类中,演示了如何通过接口传参和服务调用来展示多态行为。

package com.gezhi.interfaces;

/**

* 新建一个dog类实现接口livingable(狗吃和上厕所都是与生俱来的不应该写成接口)

* @author square 凉

*

*/

public class Dog implements Livingable{

private String dogName;

private int dogAge;

public String getDogName() {

return dogName;

}

public void setDogName(String dogName) {

this.dogName = dogName;

}

public int getDogAge() {

return dogAge;

}

public void setDogAge(int dogAge) {

this.dogAge = dogAge;

}

public void eat() {

System.out.println(dogName + " 具有吃东西的能力");

}

public void wc() {

System.out.println(dogName +" 具有上厕所的能力");

}

}

package com.gezhi.interfaces;

/**

* 人类,也实现接口吃饭上厕所的能力(当然吃和上厕所是与生俱来的能力,不应该写成接口)

* @author square 凉

*

*/

public class People implements Livingable , ThinkAble{

private String peopleName;

private int peopleAge;

public String getPeopleName() {

return peopleName;

}

public void setPeopleName(String peopleName) {

this.peopleName = peopleName;

}

public int getPeopleAge() {

return peopleAge;

}

public void setPeopleAge(int peopleAge) {

this.peopleAge = peopleAge;

}

public void eat() {

System.out.println(peopleName + "  具有吃东西的能力");

}

public void wc() {

System.out.println(peopleName +" 具有上厕所的能力");

}

@Override

public void think() {

// TODO Auto-generated method stub

System.out.println(peopleName + "  具有思考的行为");

}

}

package com.gezhi.interfaces;

/**

* 建一个服务类服务living这种能力

* @author square 凉

*

*/

public class Service {

/**

* 服务其他生物的行为

*/

public void serviceOther(Livingable lb) {

lb.eat();

lb.wc();

}

/**

* 人具有思考的行为,这个方法主要传个人(这里传了一个接口的参数,人类来实现它,主要运用了多态的特性)

* @param think

*/

public void ThinkOthers(ThinkAble think) {

think.think();

}

}

package com.gezhi.interfaces;

/**

* 思考的能力

* @author square 凉

*

*/

public interface ThinkAble {

void think();

}

package com.gezhi.interfaces;

/**

* 函数主入口类

* @author square 凉

*

*/

public class MainEnter {

public static void main(String[] args) {

// TODO Auto-generated method stub

Service se = new Service();//实例化服务类一个对象

People p = new People();//实例化人一个对象

p.setPeopleName("如花");//设置人名

se.serviceOther(p);//调用服务类的serviceOthers这个方法(本来这个参数是接口livingable的,这里小转大,传个人这个实现了接口的对象)

Dog d = new Dog();//实例化一个狗类

d.setDogName("莽子");

se.serviceOther(d);

se.ThinkOthers(p);

}

}

### Java 调用接口并传递数的实现方式 在 Java 中调用接口并通过 `Body` 或其他形式传递数是一种常见的需求。以下是几种典型的场景及其对应的解决方案。 #### 1. 使用 HTTP 客户端库发送 POST 请求 (通过 Body 传参) 当需要向第三方接口发送请求并将数据作为 `Body` 数传递时,通常会使用像 Apache HttpClient 或 OkHttp 这样的 HTTP 库来完成操作。下面是一个基于 Apache HttpClient 的示例: ```java import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class HttpExample { public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); try { HttpPost postRequest = new HttpPost("http://example.com/api"); String jsonRequestBody = "{\"key\":\"value\"}"; StringEntity input = new StringEntity(jsonRequestBody); input.setContentType("application/json"); postRequest.setEntity(input); CloseableHttpResponse response = httpClient.execute(postRequest); System.out.println(response.getStatusLine().getStatusCode()); } finally { httpClient.close(); } } } ``` 上述代码展示了如何构建一个带有 JSON 数据体的 POST 请求,并将其发送到指定 URL[^1]。 --- #### 2. Java 调用 Kettle Job 并传递数 对于 Kettle(Pentaho Data Integration),可以通过命令行或者 API 来启动 Job 和 Transformation 同时传递必要的数。如果目标是通过 Java 程序控制这些流程,则可以利用 Pan/Carte 工具提供的远程执行功能。 以下是一段简单的例子展示如何设置环境变量以及运行特定作业文件的同时附带自定义配置项: ```java String kettleHome = "/path/to/kettle"; System.setProperty("KETTLE_HOME", kettleHome); ProcessBuilder processBuilder = new ProcessBuilder( "sh", "-c", "kitchen.sh -file=/jobs/sample.kjb -param:paramName=paramValue" ); processBuilder.redirectErrorStream(true); try { Process process = processBuilder.start(); } catch (Exception e) { e.printStackTrace(); } ``` 尽管网络上关于直Java数注入至 Job 文件的具体教程较少见,但此方法已被证实可行[^2]。 --- #### 3. 调用 WebService 接口 针对 SOAP/WSDL 类型的服务访问情况,推荐采用 JAX-WS 技术栈生成客户端代理类来进行交互;而对于 RESTful 风格则更适合选用 Jersey/Fasterxml Jackson 组合处理序列化/反序列化进程中的复杂对象结构映射关系等问题。 这里给出一段基础版的 SoapClient 创建逻辑供考: ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class SoapWebServiceCall { private final Service service; public SoapWebServiceCall(URL wsdlLocation, QName serviceName){ this.service = Service.create(wsdlLocation,serviceName); } public Object getPort(Class<?> portInterface,QName portName){ return service.getPort(portName,portInterface); } } ``` 实际项目开发过程中还需要考虑异常捕获机制设计等方面因素[^3]。 --- ### 总结说明 综上所述,在不同业务背景下选取合适的工具链能够有效简化编码难度提升工作效率。无论是常规 Rest Api 调用还是集成 ETL 工程都离不开良好规划前期准备工作比如明确输入输出格式约定等内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值