Coder Social home page Coder Social logo

duck.it's Introduction

Duck.It

A simple tools for java to create a interface from object which isn't inherit

Example:

class MyClass {
    public String value = "World";
    public String hello(){
        return "Hello";
    }
}

interface IHello{
    String hello();
    String getValue();
}

MyClass myClass = new MyClass();
IHello it = Duck.it(IHello.class, myClass);
String x = it.hello();
assertEquals(x, "Hello");
String v = it.getValue();
assertEquals(v, "World");

有句话说得好,当一个东西看起来像鸭子,吃起来像鸭子,那么它就是鸭子。所以我把这个小工具命名为 Duck.it

Java 里,正常对象类必须从某个接口继承,对象才能转换为这个接口,并通过接口操作这个对象。

这个工具类借用接口代理,实现了一个很小的但很有趣的功能,当对象实现了某个接口,可以直接创建这个接口,而如果对象没有继承这个接口, 但实现了那个接口所有的方法,那么我们就可以通过 Duck.it 来创建这个接口。

特别的,如果接口里有 get/set 方法,对象类没有实现它,但有对应的字段(Field),也可以。

当然,如果接口里有方法在对象里找不到,Duck.it 会抛出 NoSuchMethodException 异常。

这个小工具有个特别有用的用法,就是限制对外接口的返回字段。比如数据库对象是有密码、手机号等敏感字段的,直接返回给前端显然不合理,常规的做法 是通过 BeanCopy 之类的工具,把对象复制到一个新对象里,再返回给前端。

但用这个工具,就可以通过定义一个接口,通过写 get 方法限制返回字段,然后通过这个接口代理对象创建接口,达到限制返回字段的目的。 特别的,如果你通过 gson 序列化对象,不能使用这个工具,因为 gson 不是通过 get 方法来序列化对象的,而 Spring boot 默认的 Jackson 或者很多人 使用的 Fastjson 是可以正确序列化带 get 方法的接口的。

duck.it's People

Contributors

jadedrip avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.