在java中有一种从构造函数调用void方法的方法。我尝试这样的东西,但得到一条错误消息,编译器无法找到符号方法printThis(java.lang.String):
public class Date{
public Date(String inString){
String s = inString;
String b;
b.printThis(s);
}
public void printThis(getString)
{
System.out.printf(System.out.printf( new SimpleDateFormat("MM/dd").format(new SimpleDateFormat("MM/dd").parse(getString) ) );
}
答案 0 :(得分:3)
你想要printThis(s)
- 编译器正在String实例上寻找一个不存在的printThis方法。
答案 1 :(得分:2)
如下所示,代码中存在大量错误。这些是我发现的。
public class Date{
问题:您缺少包声明意味着它将在默认包中。这是个坏主意。
问题:您使用的类名与标准类库中常用的类相同。这是一个坏主意。
public Date(String inString){
String s = inString;
String b;
b.printThis(s);
错误:代码尝试调用名为printThis(...)
的String API中的方法。没有这样的方法。您应该摆脱b
,只需致电printThis(s)
错误:代码尝试使用未初始化的本地(b
),这会产生编译错误(如果您通过将b
的类型更改为某些内容来“修复”上一个错误有一个printThis
方法。
问题:如果构造函数有可能在子类中被重写,那么构造函数调用正在构造的对象的方法是不好的做法。问题是在超类初始化完成之前,可能会在对象上调用重写方法(来自子类)。可以安全地拨打static
或private
方法。
}
public void printThis(getString) {
错误:声明中存在语法错误。将getString
更改为String getString
。
问题:参数名称的选择是(IMO)无意义的。什么是“获取字符串”???
System.out.printf(System.out.printf(
new SimpleDateFormat("MM/dd").format(
new SimpleDateFormat("MM/dd").parse(getString) ) );
错误:编译错误:括号不平衡。
错误:编译错误:printf
的第一个参数必须是String
或Locale
。在您的代码中,外部调用中的第一个参数是PrintStream
实例。
错误:System.out.printf(System.out.printf(
是荒谬的。您几乎肯定应该只使用System.out.println
或System.out.print
。如果您使用printf
方法,则必须使用PrintStream
javadocs中指定的语法提供格式字符串。 (这与日期格式使用的语法不同!!!)
}
错误:缺少'}'来完成课程。
问题:您的代码风格需要大量工作。如果你能发誓圣经上没有其他人曾经必须阅读你的代码(!),那么我认为它没问题。否则,这种东西是不可接受的。如果这是作业,我会直接给你50%的分数,因为没有尝试让风格正确。
答案 2 :(得分:1)
您已将printThis()用作String的方法。如果您想打印您想要的日期
printThis(s);
使用与JDK库类相同的类名(Date)通常不是一个好主意
答案 3 :(得分:0)
以下几行不起作用:
String b;
b.printThis(s);
上述代码正在尝试在名为printThis
的{{1}}对象上调用String
方法。
由于b
方法不存在,编译器会返回错误消息,说明找不到该方法。
可能的目的是:
String.printThis
以上将调用当前实例的printThis(s);
方法。
答案 4 :(得分:0)
你得到的错误是因为你试图在对象b上调用printThis(),这是一个String。你想要:
public Date(String inString) {
printThis(inString);
}
仅供参考,通常不建议将类命名为与JDK类相同(如Date)。你对inString所做的任务也没有真正实现。也许你的代码是对你正在做的事情的简化,但我认为无论如何我都会提到它。