Java:返回类(不是实例)

标签 java static class-design return-value

是否可以在静态方法中返回一个类?我会解释...

我有:

public class A { public static void blah(){} }
public class B { }

我想在 B 中创建一个返回 A 的静态方法。所以你可以这样做:

A.blah();

B.getA().blah();

这没有创建 A 的实例。只需使用静态方法即可。

这可能吗?

最佳答案

这是对@irreputable 回答的反驳:

public class B { 
    public static A getA(){ return null; }
}

B.getA().blah(); //works!

它“有效”,但可能不是您期望的那种感觉,当然也不是一种有用的方式。让我们将其分为两部分:

A a = B.getA();
a.blah();

第一个语句返回一个(在本例中为 null)A 实例,第二个语句忽略该实例并调用 A.blah()。所以,这些语句实际上等同于

B.getA();
A.blah();

或者(假设 getA() 没有副作用),就很简单

A.blah();

下面是一个更清楚地说明这一点的例子:

public class A {
   public static void blah() { System.err.println("I'm an A"); }
}

public class SubA extends A {
   public static void blah() { System.err.println("I'm a SubA"); }
}

public class B { 
   public static A getA(){ return new SubA(); }
}

B.getA().blah(); //prints "I'm an A".

...这(我希望)说明了为什么这种方法不能解决 OP 的问题。

关于Java:返回类(不是实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932625/

相关文章:

java - 如何创建静态最终 java.net.URL?

c# - 静态只读字段的初始化顺序

.net - 为什么静态类只能有静态成员?

java - 从 GooglePlay 安装后首次启动应用程序后出现 java.lang.RuntimeException ...由 : java. lang.ClassNotFoundException 引起

reactjs - 下一个 : Render data from GET request each time the page loads

c++ - 用另一个类的 vector 生成类的 vector 的函数声明

c# - 对象内的链接是否被视为反模式?

java - 具有 MultiPartFile 属性的 Restful POST API DTO 的 Spring 启动测试

java - 打印返回值

java - (Android/Java) Google Sheets v4 isUserRecoverableError 状态 : NEED_PERMISSION