java-实例化扩展类或其父级(取决于情况)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-实例化扩展类或其父级(取决于情况),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1990字,纯文字阅读大概需要3分钟。
内容图文
![java-实例化扩展类或其父级(取决于情况)](/upload/InfoBanner/zyjiaocheng/683/ea32950b05f44062911743796374697e.jpg)
假设我在ProjectA中有一个名为Human的类.在同一项目的CreatureBuilder类中实例化它.
现在,我想在另一个项目(即ProjectB)中创建一个名为Cyborg的新类. ProjectB的进口中包含ProjectA,但ProjectA对ProjectB一无所知.
半机械人扩展了Human,并且还必须由ProjectA的CreatureBuilder实例化(因此,半机械人位于ProjectB中,我从ProjectB调用CreatureBuilder来实例化半机械人,但是CreatureBuilder以及我的Human类也位于ProjectA中).
我需要一种逻辑,当从ProjectA实例化CreatureBuilder时创建一个Human,并从ProjectB实例化CreatureBuilder时创建一个半机械人.
我认为可以通过在ProjectA中使用getCreature()方法创建一个接口来实现.该方法将在ProjectB中被重写以返回新的Cyborg,然后传递回ProjectA的CreatureBuilder.
还有其他建议吗?您认为最好的解决方法是什么?我可以改用反射API吗?
干杯!
解决方法:
Java 8
CreatureBuilder可以通过请求Supplier将生物的创建委托给调用者.
public class CreatureBuilder {
public Creature getCreature(Supplier<Creature> creatureSupplier)
{
//do some unknown things
return creatureSupplier.get();
}
}
ProjectA的用法
public class ProjectA {
public static void main(String[] args) {
Creature A = new CreatureBuilder().getCreature(Human::new);
}
}
ProjectB的用法
public class ProjectB {
public static void main(String[] args) {
Creature B = new CreatureBuilder().getCreature(Cyborg::new);
}
}
如果不被迫不要使用反射.
Java 7
如果您坚持使用Java 7,则原理将保持不变,只是它有些冗长.
您必须声明并使用自己的类似于供应商的接口
public interface CreatureSupplier {
Creature get();
}
public class CreatureBuilder {
public Creature getCreature(CreatureSupplier creatureSupplier)
{
//do some things
return creatureSupplier.get();
}
}
用法有点冗长
public class ProjectA {
public static void main(String[] args) {
Creature A = new CreatureBuilder().getCreature(new CreatureSupplier() {
@Override
public Creature get() {
return new Human();
}
});
}
}
public class ProjectB {
public static void main(String[] args) {
Creature B = new CreatureBuilder().getCreature(new CreatureSupplier() {
@Override
public Creature get() {
return new Cyborg();
}
});
}
}
而且…就这样,您的行为与Java 8中的行为相同.
内容总结
以上是互联网集市为您收集整理的java-实例化扩展类或其父级(取决于情况)全部内容,希望文章能够帮你解决java-实例化扩展类或其父级(取决于情况)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。