方法—有没有一种方法可以在java中多次重复示例变量调用

bweufnob  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(392)

我尝试在java中重复一个即时变量调用n次,如下所示:

System.out.println(ClassName.InstantVarialble);

System.out.println(ClassName.IntantVariable * N); 
//where N = 3, should preform the following:

System.out.println(ClassName.IntantVariable.IntantVariable.IntantVariable);

这有可能吗?如果没有,是否有一个内置的java函数可以满足我的要求,或者我可以得到一些关于如何编写一个可以重复即时调用的方法的想法?
我正在处理不返回空位置的双链表,这里是我试图完成的不返回空位置的图像。这和他们在这段视频中所做的相似https://youtu.be/bspfdzvvye8?list=plpf65ftmt69ius9a43iyab1rz3bboippa

b0zn9rqh

b0zn9rqh1#

您可能可以在for循环中执行此操作,询问变量在该位置上是否有值,因为我只是假设您的结构可能是这样的:

public class A{
    public void something(){
        B varB = new B();

        for(int i = 0; i < 3; i++){
            if(varB != null)
                varB = varB.getBB();
        }
        System.out.println(varB.toString());
    }
}

public class B{

    public B getBB(){ return this; }
}

实际上我不知道这是不是你想要的。

vu8f3i0k

vu8f3i0k2#

这是可能的,但我不建议用反射。我不知道为什么要这样做:字段的名称必须相同。

class A {
    public static int field = 99;
}
class B {
    public static A field = new A();
}
class C {
    public static B field = new B();
}

public class Blah
{
    public static String foo(Class<?> clazz, String fieldName, int n)
        throws NoSuchFieldException, IllegalAccessException
    {
        for (int i = 0; i < n - 1; ++i)
        {
            clazz = clazz.getField(fieldName).get(null).getClass();
        }

        return clazz.getField(fieldName).get(null).toString();
    }

    public static void main(String... args)
        throws NoSuchFieldException, IllegalAccessException
    {
        System.out.println(foo(C.class, "field", 1));
        System.out.println(foo(C.class, "field", 2));
        System.out.println(foo(C.class, "field", 3));
    }
}

在这里运行。样本输出:
b@65e579dc
a@61baa894
99
如果您希望能够对私有字段执行此操作,则需要允许访问。

相关问题