- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我在 ProjectA
中有一个名为 Human
的类。它在同一项目的 CreatureBuilder
类中实例化。
现在我想在另一个项目中创建一个名为 Cyborg
的新类,即在 ProjectB
中。 ProjectB
在其导入中有 ProjectA
,但 ProjectA
对 ProjectB
一无所知。
Cyborg extends Human
,并且还必须由 ProjectA
的 CreatureBuilder
实例化(因此,Cyborg
位于在 ProjectB
中,我从 ProjectB
调用 CreatureBuilder
来实例化 Cyborg
,但是 CreatureBuilder
是位于 ProjectA
以及我的 Human
类中)。
当 CreatureBuilder
从 ProjectA
实例化时,我需要一个逻辑来创建一个 Human
,并创建一个 Cyborg
当 CreatureBuilder
从 ProjectB
实例化时。
我认为可以通过在 ProjectA
中使用 getCreature()
方法创建接口(interface)来实现。此方法将在 ProjectB
中被覆盖以返回新的 Cyborg
,然后传递回 ProjectA
的 CreatureBuilder
。还有其他建议吗?您认为最好的解决方法是什么?我可以改用反射 API 吗?
干杯!
最佳答案
CreatureBuilder
可以通过请求 Supplier 将生物的创建委托(delegate)给调用者.
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);
}
}
项目 B 的使用
public class ProjectB {
public static void main(String[] args) {
Creature B = new CreatureBuilder().getCreature(Cyborg::new);
}
}
如果不是被迫的话,永远不要使用反射。
如果您坚持使用 Java 7,则原理保持不变,只是它更加冗长。
您必须声明并使用您自己的类似供应商的接口(interface)
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 - 实例化扩展类或其父类(视情况而定),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35627246/
我正在实现谱聚类算法,我必须确保矩阵(拉普拉斯矩阵)是半正定矩阵。 检查矩阵是否为正定矩阵 (PD) 就足够了,因为可以在特征值中看到“半”部分。矩阵非常大(nxn,其中 n 是几千的数量级)所以特征
我是一名优秀的程序员,十分优秀!