在 java 中将 class 常量作为参数传递
Pass class constants as parameter in java
我想传递一个class常量作为参数代码是
public class XConstants {
public static final String DATA= "DATA";
public static final String SET = "Node";
}
public static void main(String[] args) {
foo(XConstants.DATA);
}
public static void foo(XConstants d){
System.out.println(d);
}
在主要方法中,我将 XConstants.DATA
传递给 foo
函数,但它给我带来了类型未匹配的编译错误,这很明显,因为 XConstants.DATA
是字符串类型。
类似地,如果我使用枚举并将枚举值传递给函数参数,它将完全正常工作。代码是
enum Color{RED,BLUE}
public static void main(String[] args) {
bar(Color.RED);
}
public static void bar(Color d){
System.out.println(d);
}
此处枚举值只是作为参数传递。
我想知道我应该如何更改我的 XConstants 代码,以便它可以像代码中提到的枚举一样工作(我知道两者是不同的东西)。
请注意,我不想像
这样更改方法签名
public static void main(String[] args) {
foo(XConstants.DATA);
}
public static void foo(String d){
System.out.println(d);
}
在这种情况下它会正常工作,因为在这种情况下类型不匹配冲突已解决。
简而言之,我想知道我应该如何更改我的 XContants 代码,我应该使用哪种设计模式来实现这种工作正常,因为它在枚举的情况下工作。
任何帮助将不胜感激
enum Color{RED,BLUE}
类似于
class Color{
public final static Color RED = new Color("RED");
public final static Color BLUE = new Color("BLUE");
private String name;
private Color(String name){
this.name = name;
}
public String toString(){
return name;
}
//...rest of code like `values()`, and `ordinal()` methods
}
因此,如果方法需要 Color
,则可以传递 Color.RED
,因为 RED
它是 Color
.
类型的实例
现在,根据您的要求,您可以尝试使 XConstants
适应这种模式。
当您已经知道 enums 完全符合您的目的时,我不确定您为什么要这样做。如果您只是想知道是否可以使用 classes 实现此目的,请继续阅读。
Enums 在许多方面表现得像 classes。我想您已经知道它们也可以有字段、构造函数和方法。但是,目前您感兴趣的最重要的事情是 枚举常量的类型是枚举本身的类型。
因此,要实现这种 enum 之类的行为,您只需以这种方式对 class 进行建模。
public class XConstants {
private String name;
public XConstants(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
public static final XConstants DATA = new XConstants("DATA");
public static final XConstants SET = new XConstants("Node");
public static void main(String[] args) {
foo(XConstants.DATA);
foo(XConstants.SET);
}
public static void foo(XConstants d) {
System.out.println(d);
}
}
输出:
DATA
Node
我想传递一个class常量作为参数代码是
public class XConstants {
public static final String DATA= "DATA";
public static final String SET = "Node";
}
public static void main(String[] args) {
foo(XConstants.DATA);
}
public static void foo(XConstants d){
System.out.println(d);
}
在主要方法中,我将 XConstants.DATA
传递给 foo
函数,但它给我带来了类型未匹配的编译错误,这很明显,因为 XConstants.DATA
是字符串类型。
类似地,如果我使用枚举并将枚举值传递给函数参数,它将完全正常工作。代码是
enum Color{RED,BLUE}
public static void main(String[] args) {
bar(Color.RED);
}
public static void bar(Color d){
System.out.println(d);
}
此处枚举值只是作为参数传递。 我想知道我应该如何更改我的 XConstants 代码,以便它可以像代码中提到的枚举一样工作(我知道两者是不同的东西)。 请注意,我不想像
这样更改方法签名public static void main(String[] args) {
foo(XConstants.DATA);
}
public static void foo(String d){
System.out.println(d);
}
在这种情况下它会正常工作,因为在这种情况下类型不匹配冲突已解决。 简而言之,我想知道我应该如何更改我的 XContants 代码,我应该使用哪种设计模式来实现这种工作正常,因为它在枚举的情况下工作。
任何帮助将不胜感激
enum Color{RED,BLUE}
类似于
class Color{
public final static Color RED = new Color("RED");
public final static Color BLUE = new Color("BLUE");
private String name;
private Color(String name){
this.name = name;
}
public String toString(){
return name;
}
//...rest of code like `values()`, and `ordinal()` methods
}
因此,如果方法需要 Color
,则可以传递 Color.RED
,因为 RED
它是 Color
.
现在,根据您的要求,您可以尝试使 XConstants
适应这种模式。
当您已经知道 enums 完全符合您的目的时,我不确定您为什么要这样做。如果您只是想知道是否可以使用 classes 实现此目的,请继续阅读。
Enums 在许多方面表现得像 classes。我想您已经知道它们也可以有字段、构造函数和方法。但是,目前您感兴趣的最重要的事情是 枚举常量的类型是枚举本身的类型。
因此,要实现这种 enum 之类的行为,您只需以这种方式对 class 进行建模。
public class XConstants {
private String name;
public XConstants(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
public static final XConstants DATA = new XConstants("DATA");
public static final XConstants SET = new XConstants("Node");
public static void main(String[] args) {
foo(XConstants.DATA);
foo(XConstants.SET);
}
public static void foo(XConstants d) {
System.out.println(d);
}
}
输出:
DATA
Node