我想知道在类内部放置类和在类中的接口需要什么?
class A {
interface B {}
}
interface D {
class E {}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在java中模拟mixins或traits?基本上,我需要一种方法来进行多重继承,因此我可以将常用的业务逻辑添加到多个类中
是否有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的界面,在90%的情况下我想要的功能是相同的.
我的第一直觉是用静态方法创建一个具体的类.然后,当我想要默认功能时,我会将功能委托给静态方法.
这是一个简单的例子:
接口
public interface StuffDoer{
public abstract void doStuff();
}
Run Code Online (Sandbox Code Playgroud)
具体实施方法
public class ConcreteStuffDoer{
public static void doStuff(){
dosomestuff...
}
}
Run Code Online (Sandbox Code Playgroud)
使用默认功能的具体实现
public class MyClass implements StuffDoer{
public void doStuff(){
ConcreteSuffDoer.doStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
这里有更好的方法吗?
编辑
在看到一些提议的解决方案后,我想我应该更清楚我的意图.本质上我试图解决Java不允许多重继承.另外要明确我不是要声明Java是否应该允许多重继承.我只是在寻找为实现接口的类创建默认方法实现的最佳方法.
我在其中一个java论坛中找到了以下示例.
interface employee{
class Role{
public String rollname;
public int roleId;
public Object person;
}
Role getRole();
// other methods
}
Run Code Online (Sandbox Code Playgroud)
我已经执行了上面的代码片段并且它正在成功编译.这意味着我们可以在界面中拥有一个类.
我的问题是拥有这些课程的用途是什么?是任何设计模式?
有这个课
public abstract class Mother{
public class Embryo{
public void ecluse(){
bear(this);
}
}
abstract void bear(Embryo e);
}
Run Code Online (Sandbox Code Playgroud)
只有我有一个母亲的实例,我才能创建一个胚胎实例:
new Mother(){...}.new Embryo().ecluse();
Run Code Online (Sandbox Code Playgroud)
题:
java编译器允许我在接口内编写一个Class定义.这有什么具体用途吗?
interface ClassInterface {
void returnSomething();
int x = 10;
class SomeClass {
private int y;
private void classDoingSomething() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
请解释 .
考虑以下界面.
public interface ThirdPartyApiHandler {
public OperationResult doOperation(OperationInput input);
public static class OperationResult {
//members of OpeationResult. metrics after file processing
private int successfulRecords;
private int failedRecords;
}
public static class OperationInput {
//implementations call third party API to process this file.
private String inputBatchFile;
}
//Constant which would be same across all implementations.
public static final int GLOBAL_CONSTANT = 1;
}
Run Code Online (Sandbox Code Playgroud)
界面设计不好吗?
OperationResult并OperationInput定义为静态类.它们仅用于实现而不是其他任何地方.我在这里看到的优点是 - 我不必为这两个类创建单独的文件.他们也获得了父类的命名空间.
我已阅读有关常量接口的信息.但在这种情况下,我在普通接口中定义常量,这些常量在所有实现中都必须相同,并且将在这些实现中使用.
我是第一次使用这种模式,所以想得到建议.
在哪种情况下接口可以嵌套类?
以下代码是允许且有效的.
public interface Iface {
void show();
class ifaceClass {
int x;
public ifaceClass() {
System.out.println(x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也在努力创建类ifaceClass的对象.
编辑:
我能够制作这样的物体
public class Test implements Iface {
public static void main(String[] args){
ifaceClass ifaceClassObj = new ifaceClass();
}
public void show() {
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到如果Test没有实现Iface那么我需要在导入之后,
import com.jls.Iface.ifaceClass;
Run Code Online (Sandbox Code Playgroud)
但它归结为同样的问题,为什么不把它用作另一个类.
这种方法的差异或增值是什么?