从 java 中的 class 移除命名空间
Remove namespace from class in java
我在 IDEA 中创建了一个 Processing sketch,并且正在使用多个文件。但是,在第二个文件中,定义了 none 的 Processing 方法,所以我发现了一个技巧:
...
public static PApplet processing
public void setup () {
processing = this;
...
}
...
并且我可以通过调用 Main.processing.*
访问另一个 class 中的方法(主 class 被称为 'Main')并且我可以很好地使用这些方法.
我想知道如何在每次调用函数时不必输入 Main.processing....
他们像往常一样? point(...)
而不是 Main.processing.point(...)
?
您可以将它们放在一个函数中:
public void point(...) {
Main.processing.point(...);
}
虽然我不确定这是否是好的做法...
如果 Main.processing 是一个对象,您还可以将其保存在一个变量中(使用短名称)。
为了能够理解并以正确的方式做出应该做的事情,我认为你应该首先理解Java开发中的封装:
public、private、protected、package(none) 和所有其他字段描述符。
我认为一个好的开始将在这里:
https://www.tutorialspoint.com/java/java_encapsulation.htm
要么
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
EDIT 1: 一个简单的例子,当然教程和文档中的案例更多,对方法也有效:
public class A{ //"your.package.A.java"
private int a; // Only accesible from class A, but is an instance field : a = 0; Only from class A
private static int aS; // Only accesible from class A, but is a static field, one value shared to all objects of type A : aS = 0; only from class A;
protected int aP; // Accesible from class A or any subclasses that A can have : aP = 0; OR super.aP = 0;
public int aPublic; // Accessible from any class that has imported package: "your.package" : A instance = new A(); instance.aPublic = 0;
public static int aSPublic; // // Accessible from any class that has imported package: "your.package" via class name, one value shared per all accessors : A.aSPublic = 0;
int aPackage; // Accessible from any class that is in the same package with A and not fdrom other packages, EX: clas B, but only via instance: A instance = new A(); instance.aPackage = 0;
int static aSPackage; // Accessible from any class that is in the same package with A by class name: A.aSPackage = 0;
}
public class B{ //"your.package.B.java"
}
您可以使用 Java 反射 为要调用的方法获取 Method
个对象。
实例化此(/这些)Method
个对象并在此 class.
中使用它(/它们)
如果要访问实例方法,请将封闭对象保存在变量中。
如果要访问 class 方法,请使用 静态导入:
A single-static-import declaration imports all accessible static
members with a given simple name from a type. This makes these static
members available under their simple name in the class and interface
declarations of the compilation unit in which the single-static-import declaration appears.
我认为其他问题缺少您正在使用 Processing 的上下文,它有自己的怪癖。
但通常,您要做的是将草图实例传递到任何非 PApplet class。这是一个例子:
public class MySketch extends PApplet{
MyOtherClass myOtherClass;
void setup(){
myOtherClass = new MyOtherClass(this);
}
void draw(){
myOtherClass.drawCircle();
}
}
public class MyOtherClass{
PApplet sketch;
public MyOtherClass(PApplet sketch){
this.sketch = sketch;
}
void drawCircle(){
sketch.ellipse(100, 100, 100, 100);
}
}
此 class 使用 this
关键字将对顶级 PApplet
class 的引用传递到 MyOtherClass
构造函数中。构造函数将引用存储在一个变量中,它现在可以使用它来访问 Processing 的函数。
没有一种干净的方法来为函数设置别名,因此您可以直接调用它们,恕我直言,其他大多数答案都有些老套。你绝对应该不为此使用static
关键字,因为这滥用了static
的目的。
我会坚持使用草图参考的直接方法。如果它真的困扰你,也许将它命名为 s
这样每个函数调用只有两个额外的字符 s.
?
无耻的自我推销:here 是将 Processing 用作 Java 库的指南,包括上述方法。
我在 IDEA 中创建了一个 Processing sketch,并且正在使用多个文件。但是,在第二个文件中,定义了 none 的 Processing 方法,所以我发现了一个技巧:
...
public static PApplet processing
public void setup () {
processing = this;
...
}
...
并且我可以通过调用 Main.processing.*
访问另一个 class 中的方法(主 class 被称为 'Main')并且我可以很好地使用这些方法.
我想知道如何在每次调用函数时不必输入 Main.processing....
他们像往常一样? point(...)
而不是 Main.processing.point(...)
?
您可以将它们放在一个函数中:
public void point(...) {
Main.processing.point(...);
}
虽然我不确定这是否是好的做法...
如果 Main.processing 是一个对象,您还可以将其保存在一个变量中(使用短名称)。
为了能够理解并以正确的方式做出应该做的事情,我认为你应该首先理解Java开发中的封装: public、private、protected、package(none) 和所有其他字段描述符。 我认为一个好的开始将在这里: https://www.tutorialspoint.com/java/java_encapsulation.htm 要么 https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
EDIT 1: 一个简单的例子,当然教程和文档中的案例更多,对方法也有效:
public class A{ //"your.package.A.java"
private int a; // Only accesible from class A, but is an instance field : a = 0; Only from class A
private static int aS; // Only accesible from class A, but is a static field, one value shared to all objects of type A : aS = 0; only from class A;
protected int aP; // Accesible from class A or any subclasses that A can have : aP = 0; OR super.aP = 0;
public int aPublic; // Accessible from any class that has imported package: "your.package" : A instance = new A(); instance.aPublic = 0;
public static int aSPublic; // // Accessible from any class that has imported package: "your.package" via class name, one value shared per all accessors : A.aSPublic = 0;
int aPackage; // Accessible from any class that is in the same package with A and not fdrom other packages, EX: clas B, but only via instance: A instance = new A(); instance.aPackage = 0;
int static aSPackage; // Accessible from any class that is in the same package with A by class name: A.aSPackage = 0;
}
public class B{ //"your.package.B.java"
}
您可以使用 Java 反射 为要调用的方法获取 Method
个对象。
实例化此(/这些)Method
个对象并在此 class.
如果要访问实例方法,请将封闭对象保存在变量中。
如果要访问 class 方法,请使用 静态导入:
A single-static-import declaration imports all accessible static members with a given simple name from a type. This makes these static members available under their simple name in the class and interface declarations of the compilation unit in which the single-static-import declaration appears.
我认为其他问题缺少您正在使用 Processing 的上下文,它有自己的怪癖。
但通常,您要做的是将草图实例传递到任何非 PApplet class。这是一个例子:
public class MySketch extends PApplet{
MyOtherClass myOtherClass;
void setup(){
myOtherClass = new MyOtherClass(this);
}
void draw(){
myOtherClass.drawCircle();
}
}
public class MyOtherClass{
PApplet sketch;
public MyOtherClass(PApplet sketch){
this.sketch = sketch;
}
void drawCircle(){
sketch.ellipse(100, 100, 100, 100);
}
}
此 class 使用 this
关键字将对顶级 PApplet
class 的引用传递到 MyOtherClass
构造函数中。构造函数将引用存储在一个变量中,它现在可以使用它来访问 Processing 的函数。
没有一种干净的方法来为函数设置别名,因此您可以直接调用它们,恕我直言,其他大多数答案都有些老套。你绝对应该不为此使用static
关键字,因为这滥用了static
的目的。
我会坚持使用草图参考的直接方法。如果它真的困扰你,也许将它命名为 s
这样每个函数调用只有两个额外的字符 s.
?
无耻的自我推销:here 是将 Processing 用作 Java 库的指南,包括上述方法。