# radioactive
**Repository Path**: mirrors_andyglick/radioactive
## Basic Information
- **Project Name**: radioactive
- **Description**: Java 8 library for mutating beans
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-09-07
- **Last Updated**: 2026-02-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
radioactive
===========
A Java 8 library for building, validating, mutating and mapping beans.
[](https://travis-ci.org/poetix/radioactive)
In Maven:
```xml
com.codepoetics
radioactive
0.7
```
An ```Accessor``` is a ```Getter``` paired with a ```Setter```, like so:
```java
public static final Accessor NAME = Accessor.of(Person::getName, Person::setName);
public static final Accessor ADDRESS = Accessor.of(Person::getAddress, Person::setAddress);
```
You can use them to build new objects:
```java
Person person = Person.BUILDER.with(
Person.NAME.of("Arthur Putey"),
Person.ADDRESS.of(Address.BUILDER.with(
Address.FIRST_LINE.of("22 Acacia Avenue"),
Address.SECOND_LINE.of("Sunderland"),
Address.POSTCODE.of("VB6 5UX"))))
.get();
```
to query and modify existing objects:
```java
assertThat(Person.NAME.get(person), equalTo("Arthur Putey"));
assertThat(Person.ADDRESS.join(Address.SECOND_LINE).get(person),
equalTo("Sunderland"));
Person.NAME.set(person, "Angus Yentob");
assertThat(person.getName(), equalTo("Angus Yentob"));
Person.ADDRESS.join(Address.POSTCODE).set(person, "RA8 81T");
assertThat(person.getAddress().getPostCode(), equalTo("RA8 81T"));
```
to validate objects:
```java
Validator validator = Validator
.validating("name", Person.NAME, equalTo("Agnes Phobos"))
.and("age", Person.AGE, greaterThanOrEqualTo(0));
Valid validPerson = Valid.validate(new Person("Angus Eros", -2), validator);
assertFalse(validPerson.isValid());
assertFalse(validPerson.get().isPresent());
assertThat(validPerson.validationErrors(), hasItems("name: Angus Eros != Agnes Phobos", "age: -2 < 0"));
```
and to map from type to type:
```java
Person person1 = new Person();
person1.setName("Antigone");
person1.setAge(30);
Knight bean2 = Mapper.from(Person::getAge).to(Knight::setAge)
.andFrom(Person::getName).via(String::toUpperCase).to(Knight::setName)
.andFrom("I seek the grail").to(Knight::setQuest)
.creatingWith(Knight::new)
.apply(person1);
assertThat(bean2.getName(), equalTo("ANTIGONE"));
assertThat(bean2.getAge(), equalTo(30));
assertThat(bean2.getQuest(), equalTo("I seek the grail"));
```
If you've seen any of my other libraries for doing similar things, notably [Karg](http://github.com/youdevise/karg) and [Octarine](http://github.com/poetix/octarine), you'll have seen most of this before. Radioactive is a variant specifically for working with old-style "bean" objects with getters and setters, because sometimes you have to and why make it more painful than it needs to be?