Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中类分类的模拟方法_Java_Oop_Design Patterns - Fatal编程技术网

Java中类分类的模拟方法

Java中类分类的模拟方法,java,oop,design-patterns,Java,Oop,Design Patterns,一些编程语言具有向类(例如Objective-C)添加“类别”的功能,这意味着在不进行子类化的情况下向类添加新功能 我真的觉得它很有用,但我无法想象用Java来模拟这个特性 因此,问题是: 在Java中模拟类类别的优雅模式看起来如何?我真正想要的是达到同样的效果,而不是用同样的方法。我可以看到两种方法 您可以使用动态代理。这个特性意味着JVM在运行时为您“实现”接口,提供了实现回调方法的能力,您可以在其中调用“真实”实现 另一种方法是字节码工程。但我认为第一种方法更容易 在Java 8中,您可能

一些编程语言具有向类(例如Objective-C)添加“类别”的功能,这意味着在不进行子类化的情况下向类添加新功能

我真的觉得它很有用,但我无法想象用Java来模拟这个特性

因此,问题是:

在Java中模拟类类别的优雅模式看起来如何?我真正想要的是达到同样的效果,而不是用同样的方法。我可以看到两种方法

您可以使用动态代理。这个特性意味着JVM在运行时为您“实现”接口,提供了实现回调方法的能力,您可以在其中调用“真实”实现


另一种方法是字节码工程。但我认为第一种方法更容易

在Java 8中,您可能可以通过接口注入(向现有类添加新的
接口)和默认方法(为
接口
方法提供默认实现)的组合来实现这一点。

您可以使用向现有类添加功能。

简短回答:无,除了子类化或者仅仅提供Util类之外,我不是说用完全相同的方法来实现它,而是要达到相同的效果。“java方式”就是子类化它或者使用组合。程序化的方法是使用和Utils类,例如,对于C类,创建一个CUtilsI不知道java 8的这个新特性,+1:),但我真的在寻找一个模式来与当前的java一起使用。我真的在寻找一个设计模式,而不是修改字节码,但无论如何,谢谢。这就是我要寻找的!Thanks@JuanAspectJ是执行字节码修改的流行库之一。这就是我实际上想说的…@AlexR首先AspectJ是Java编程语言的无缝面向方面扩展。它具有针对Java和AspectJ代码的全功能编译器。当然,它也可以修改现有的类,但这种特性是次要的。将AspectJ调用为字节码修改库与将Java编译器调用为字节码生成框架是相同的。