我用Java编写了这个例子,但我认为(未经测试)它可以在其他(所有?)语言中使用.
你有2个文件.首先,M.java
:
public class MType {
XType x;
MType() {x = null;}
}
Run Code Online (Sandbox Code Playgroud)
第二,另一个文件(在同一目录中)XType.java
,:
public class XType {
MType m;
public XType(MType m) {this.m = m;}
}
Run Code Online (Sandbox Code Playgroud)
好吧,这是糟糕的编程,但如果你运行javac XType
它编译:编译甚至MType
因为XType
需要它.但...... MType
需要XType
......这是如何运作的?编译器如何知道发生了什么?
我想知道编译器(javac或你知道的任何其他编译器)如何管理这种情况,而不是如何避免它.
我问,因为我正在写一个预编译器,我想管理那种情况.
我正在编写(好,完成)Java的"扩展",这将有助于角色编程.
我用javacc将代码翻译成Java代码.我的编译器为每个声明的类添加了一些代码.这是一个更清晰的例子:
MyClass extends String implements ObjectWithRoles { //implements... is added
/*Added by me */
public setRole(...){...}
public ...
/*Ends of stuff added*/
...//myClass stuff
}
Run Code Online (Sandbox Code Playgroud)
它为您声明的每个单一类添加了Implements ..和必要的方法.相当粗糙,不是吗?
如果我在一个类中编写我的方法并且所有类都扩展了那个...但是..如果类已经扩展了另一个类(就像示例那样)会更好吗?
我不想创建一种管理角色的包装器,因为我不希望程序员必须知道的不仅仅是Java,很少有新的保留字及其用法.
我的想法是扩展java.lang.Object ..但你不能.(对吧?)
其他想法?
我是新来的,但我关注这个网站,谢谢你的阅读和你给出的所有答案!(我为英语道歉,我是意大利人)
我正在使用NetBeans开发J2EE项目.当我创建项目时,我没有检查"启用上下文和依赖注入"选项.
项目创建后是否可以更改选项?哪里?
谢谢!
我正在尝试使用antlr 4解析文件,我无法理解为什么不能解析多于一位的整数(第79:44行在输入'17'处没有可行的替代方案).
这是有趣的语法http://pastebin.com/rxktvUBi
这是int的定义
fragment DIGIT : [0-9] ;
integer : DIGIT+ ;
Run Code Online (Sandbox Code Playgroud)
这根本不起作用.这个版本
integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ;
Run Code Online (Sandbox Code Playgroud)
仅适用于1位整数.
这是未解析的行的示例
struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17))
Run Code Online (Sandbox Code Playgroud)
问题在于
simple_expression:
(integer)+
Run Code Online (Sandbox Code Playgroud)
请注意,如果我使用标识符
ID:
('a'..'z'|'A'..'Z'|'0'..'9'|'_')+;
identifier: ID;
Run Code Online (Sandbox Code Playgroud)
而不是整数
simple_expression:
identifier
Run Code Online (Sandbox Code Playgroud)
这样可行.
为什么?任何的想法?
我在某处读过您在 JVM 上执行的 Java 程序将始终以 main 方法开始执行。但是当我在bluej上编译下面的程序时,它成功编译而没有任何错误。
import java.util.*;
class Calculate
{
int m,n,s,d;//Data members
void inputdata()
{
Scanner sc = new Scanner(System.in);
System.out.println("enter two numbers");
m = sc.nextInt();
n = sc.nextInt();
}
void calculation()
{
s = m+n;
d = m-d;
}
void outputdata()
{
System.out.println("sum of two numbers:"+s);
System.out.println("difference of two numbers:"+d);
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我在下面的程序中没有 main 方法,那么它如何在 BLUEJ 上成功编译?我们需要创建一个主函数,当你的应用程序第一次运行时,控制将被转移。否则 JVM 将找不到转移控制权的函数,您的应用程序将无法运行。