来自C ++环境我习惯将我需要的许多函数拆分成funcs.h
文件,然后执行#include "funcs.h"
,然后将函数原型添加到主.cpp文件中。现在我开始使用java(主要使用我的Minecraft ModloeaderMp)并且我已经创建了一个funcs.java
文件,其中有一些预制函数(例如一些用于文件复制,给出堆栈项等的函数)。我已经在使用Public class mod_mine extends BaseModMp
语句了,有没有办法可以导入这些函数,还是我可以再做一个Public class mod_mine extends funcs
?
答案 0 :(得分:19)
您不是#include
Java,import package.Class
。从Java 6开始(或者它是5?),你也可以import static package.Class.staticMethodOfClass
,它可以实现你想要做的某些形式。
另外,正如@duffymo所指出的那样,import
只会使您无法系统地为导入的类名添加包名称前缀,或者使用包和类名导入静态方法名称。实际的#include
语义在Java中根本不存在 -
那就是说,拥有一个“funcs.java”文件在我看来就像你开始将你的脚趾浸入一些反模式......你应该远离这些。
答案 1 :(得分:9)
Java中没有#include
。
我不希望设计有funcs.java
存储所有变量的设计。对象是封装在单个组件中的状态和行为。如果你这样做,你不是以面向对象的方式进行设计。
好名字很重要。扩展Stuff
的名为Stuff2
的类最好只是一个糟糕的例子。
这不是好Java。我也不认为它是好的C ++。
答案 2 :(得分:3)
听起来你把所有的方法放在同一个班级。你应该将它们分开:
公用事业类
这些应该包含静态方法,这些方法可以执行诸如获取文件内容,显示对话框屏幕或将两个数字组合在一起。它们并不真正属于对象类,它们不需要实例,并且它们在整个程序中被广泛使用。有关此问题的详细示例,请参阅java.lang.Math。
常量类或配置文件
这可以是包含Constants
成员的static final
类,例如PI = 3.1415
。您可以使用Constants.PI
访问它们。
或者,您可以使用配置文件并将其加载到Configuration
中,并使用类似config.get("database")
其他强>
如果您的代码不适合其中任何一种,您需要将其放入某个类中,以使您的代码适合object-oriented programming concepts。从你的问题来看,听起来你会想要阅读这个。我会先阅读Head First Java,然后再阅读object-oriented programming in Java上的其他一些书籍。在那之后,我会看一些design patterns。
答案 3 :(得分:3)
Java是一种面向对象的编程语言,这是有原因的。
java中没有#include,尽管你可以从其他包中导入类。 制作单独的类func.java来存储变量可能不是一个好主意,除非所有这些都是常量。 通过扩展某些类,您可以重用该函数。但扩展类是否通过了IS A测试,如果不是这可能是一个坏主意。
如果从C ++迁移,请阅读一些好书,例如Head First java可能会有很多帮助。
答案 4 :(得分:2)
java中没有#include。您可以使用import语句在文件中提供类和接口。
答案 5 :(得分:0)
实际上......有一种方法可以使用与C #include相同的语义(该关键字后来被C ++借用,看起来很花哨......)。它只是没有用相同的词来定义,但它完全符合您的要求。
首先,让我们看看你在C ++中用#include做什么来理解这个问题:
#defines
,这就是它。
对于结构定义,没有意义,那就是老式C:在C ++中你不再定义struct {}
多年了,你用属性和访问器方法定义class
结构,它是在Java中也是如此:这里也没有typedef struct {}
。
为此,您有“接口”声明,请参阅https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
它完全符合您的要求:
public interface MyDefines {
final CHAR_SPACE : ' '; // ugly #define
int detectSpace(FileInputStream fis); // function declaration
// and so on
}
然后,使用:
public class MyClass extends MyAncestor implements MyDefines {
...
// implementation of detectSpace()
int detectSpace(FileInputStream fis) {
int ret = 0;
char Car;
if((Car = fis.read()) != -1) && (Car == CHAR_SPACE)) ret++;
...
}
阅读上面给出的链接,它充满了有用的案例。
答案 6 :(得分:0)
您可以在Java文件上运行C预处理程序,确保使用-P标志禁用行注释。 Google进行了快速搜索,确认已尝试了至少两次,甚至在流行的 fastutil 库中使用了该操作:
这适用于所有指令(#include,#define,#ifdef等),并且在语法和语义上均与C / C ++中的等效语句相同。