gpt4 book ai didi

java - Class myClass 的静态类属性

转载 作者:行者123 更新时间:2023-11-30 09:44:17 25 4
gpt4 key购买 nike

我正在这里试验一下。

假设我有一个类:

static class MyClass {
static String property = "myProperty";
}

和一个方法:

public static void myMethod0(Class<MyClass> clazz)  {
try {
MyClass myClass = clazz.newInstance();
System.out.println (myClass.property);
} catch (Exception e) {
e.printStackTrace();
}
}

并测试它:

public static void main(String[] args ) {
myMethod0(MyClass.class);
}

myMethod0 可以在这里工作,但是,我正在创建一个新实例以访问该属性。由于属性是静态的,我应该能够在不实际创建任何实例的情况下访问它们。例如,当您访问静态属性时,您会做的,即 MyClass.property

总结一下:是否可以通过 Class clazz = MyClass.class 访问 MyClass 的静态属性?

谢谢!

**

编辑:

**把上面的观点和我实际想要完成的事情放在一起:

public static class PDF_1 { public static PDF_1 it = new PDF_1();
static String contentType = "application/pdf";
static String fileEnding = "pdf";
}
static void myMethod0(PDF_1 pdf) {
System.out.println(pdf.fileEnding);
}


public enum PDF_2 {it;
static String contentType = "application/pdf";
static String fileEnding = "pdf";
}
static void myMethod1(PDF_2 pdf) {
System.out.println(pdf.fileEnding);
}

public static void main(String[] args ) {
myMethod0(PDF_1.it); // Works fine! However very verbose because of public static PDF_1 it = new PDF_1();
myMethod1(PDF_2.it); // Works fine! Somewhat verbose though because of the "it" keyword
}

关于我试图用它完成的事情的整个想法是,我经常看到人们声明很多字符串,即:

static class Constants {
static String PDF_CONTENT_TYPE = "application/pdf";
static String PDF_FILE_ENDING = "pdf";

static String HTML_CONTENT_TYPE = "text/html";
static String HTML_FILE_ENDING = "html";
}

// There is no way knowing what type the method actually wants. Is it contentType, fileEnding or something entirely different ?
public void myMethod(String str) {

}

我想要实现的是允许您传递主类/枚举的东西,即:PDF 并且该方法将自行确定它将使用什么。调用者只知道要传递什么,PDF 或 HTML 类/枚举。我也在寻找对这种重构友好的东西。不要使这一创作的声明复杂化也很有趣。我发现完全成熟的枚举就像一个类一样引人注目,而且很难阅读。我的想法是,我只是将父对象“PDF”和“HTML”中的两个字符串分组。一个枚举:

public enum SomeType {
PDF("application/pdf", "pdf"), HTML(...);
String contentType;
String fileEnding;
// Constructor ...
}

不允许您声明一个方法并指定此方法需要 HTML 内容。只有枚举类型是 SomeType 类型。存在“某人”将 SomeType.PDF 传递给该方法的风险。我用枚举和类所做的事情似乎是一个菜鸟解决方案,Java 语言应该提供这样的功能,或者已经提供了?

这有意义吗?

最佳答案

你可以使用反射

System.out.println(myClass.getDeclaredField("property").get(null));

get 方法通常需要一个实例来获取属性,但是由于 property 是静态的,您可以向它传递一个 null .

关于java - Class<MyClass> myClass 的静态类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7982923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com