mixin java_在Java中实现Mixin?

本文介绍了如何在Java中实现类似Mixin的功能,通过示例展示了如何定义角色接口、创建角色实现类,并利用AnimalRoles和RoleRegisterComposition来组合和使用这些角色,实现不同行为的混入。
摘要由CSDN通过智能技术生成

一个老问题的答案。

我看了一下Apache Zest。 也许只有我一个人,但我发现这些示例有些繁琐。 而且我不太明白这一点。 另一种选择是对象团队。

但是我建议您可以看一下这个仓库:

[https://github.com/Mashashi/javaroles/]

它可能会部分涵盖您要执行的操作。 看起来很简单。

这是一个例子:

定义角色的接口:

public interface Human {

String hello();

String die(String age);

String eat();

String dance();

}

public interface Monkey {String hello(); String eat();}

定义刚性型AnimalRoles ...

public class AnimalRoles implements Human, Monkey{

public static final String HALLO = "Default hallo";

public static final String DIE = "Default they kill me...";

public static final String EAT = "Default eat...";

@ObjectForRole public Human human;

@ObjectForRole public Monkey monkey;

public AnimalRoles(Human human, Monkey monkey){

this.human = human;

this.monkey = monkey;

if(this.human!=null){

((Portuguese)this.human).core = this;

}

}

@Override

public String hello() {

return HALLO;

}

@Override

public String die(String age) {

return DIE+age;

}

@Override

@TurnOffRole

public String eat() {

return EAT;

}

@Override

public String dance() {

return "Just dance";

}

public String notInRole(){

return "Oh oh";

}

}

定义班级角色Bo黑猩猩...

public class Bonobo implements Monkey{

public Bonobo() {}

@Override

public String hello(){

return "Ugauga";

}

@Override

public String eat() {

return "Nhamnham";

}

}

定义班级角色葡萄牙语...

@RoleObject(types = { AnimalRoles.class })

public class Portuguese implements Human{

public static final String HALLO = "Hey there";

public static final String DIE = "They killed me";

public static final String EAT = "Eating boiled pork now";

public AnimalRoles core;

public Portuguese() {}

@Override

public String hello() {

return HALLO;

}

@Override

public String die(String age) {

return DIE+age;

}

@Override

public String eat() {

return EAT;

}

@Override

public String dance() {

return core.dance()+" modified!";

}

}

正在运行测试...

new RoleRegisterComposition().registerRools();

AnimalRoles a = new AnimalRoles(new Portuguese(), new Bonobo());

System.out.println(a.hello());

System.out.println(a.dance());

会打印...

"Hey there"

"Dance modified!"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值