Giter Site home page Giter Site logo

lambda-type-references's Introduction

lambda-type-references

Type references using lambdas

http://benjiweber.com/blog/2015/08/04/lambda-type-references/

public static <T> T create(TypeReference<T> type) {
    return type.newInstance();
}
@Test
public void creating_a_list() {
    ArrayList<String> list = create(i->i);
    list.add("hello");
    list.add("world");

    assertEquals(asList("hello","world"), list);
}

@Test
public void creating_a_map() {
    HashMap<String, Integer> map = create(i->i);
    map.put("hello",1);
    map.put("world",2);

    assertEquals(Integer.valueOf(1), map.get("hello"));
    assertEquals(Integer.valueOf(2), map.get("world"));
}

@Test
public void variable_ref() {
    TypeReference<String> ref = i->i;
    assertEquals("java.lang.String", ref.type().getName());
}

@Test
public void variable_ref_generic_type() {
    TypeReference<ArrayList<String>> ref = i->i;
    ArrayList<String> strings = ref.newInstance();
    assertEquals(Collections.emptyList(), strings);
}

@Test
public void parameter_object() {
    List<String> result = foo(list -> {
        list.add("Hello");
        list.add("World");
    });

    assertEquals(asList("Hello foo", "World foo"), result);
}

public static List<String> foo(Parameters<ArrayList<String>> params) {
    return params.get().stream().map(s -> s + " foo").collect(toList());
}

lambda-type-references's People

Watchers

 avatar  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.