Java:返回类(不是一个实例)

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

我有:

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

我想创建一个静态方法在B女巫返回A.所以你可以做:

A.blah();

B.getA().blah();

这样,没有创建一个A的实例.只需使用它静态方法.

这可能吗?

解决方法

这是对@无可争议的回答的反驳:
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中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...