$ cat Const.java
public class Const {
String Const(String hello) {
return hello;
}
public static void main(String[] args) {
System.out.println(new Const("Hello!"));
}
}
$ javac Const.java
Const.java:7: cannot find symbol
symbol : constructor Const(java.lang.String)
location: class Const
System.out.println(new Const("Hello!"));
^
1 error
Trả lời
Điều bạn đã xác định không thực sự là một hàm tạo, nhưng phương thức được gọi là Const
. Nếu bạn đã thay đổi mã của bạn để một cái gì đó như thế này, nó sẽ làm việc:
Const c = new Const();
System.out.println(c.Const("Hello!"));
Nếu không có nhà xây dựng cụ thể được xác định một cách rõ ràng, trình biên dịch sẽ tự động tạo một constructor không có đối số.
Hàm tạo không thể trả về giá trị. Đó là cuối cùng. Nó cùng ý nghĩa - nó không thể có kiểu trả về và đó là lý do tại sao bạn nhận được lỗi biên dịch. Bạn có thể nói rằng giá trị trả về luôn ngầm là đối tượng được tạo bởi hàm tạo.
Trên thực tế Constructor trong một lớp học java không thể trả về giá trị nó phải nằm trong các hình thức sau đây
public class Test {
public Test(/*here the params*/) {
//this is a constructor
//just make some operations when you want to create an object of this class
}
}
kiểm tra những liên kết này http://leepoint.net/notes-java/oop/constructors/constructor.html http://java.sun.com/docs/books/tutorial/java/javaOO/constructors.html
Một constructor không thể có một giá trị trả về giống như một hàm "bình thường". Nó được gọi khi một istance của lớp trong câu hỏi được tạo ra. Nó được sử dụng để thực hiện khởi tạo của trường hợp đó.
Nhà xây dựng không thể trả về giá trị; họ trả lại vật thể được xây dựng, để nói.
Bạn gặp lỗi vì trình biên dịch đang tìm kiếm một hàm tạo lấy chuỗi làm đối số của nó. Vì bạn đã làm không phải là tuyên bố một hàm tạo nên hàm tạo duy nhất có sẵn là hàm tạo mặc định không nhận bất kỳ đối số nào.
Tại sao tôi nói bạn không khai báo một hàm tạo? Bởi vì ngay sau khi bạn khai báo một giá trị trả về/kiểu cho phương thức của bạn, nó không phải là một hàm tạo nữa mà là một phương thức thông thường.
Một lớp học có chứa cấu trúc cho là viện dẫn để tạo các đối tượng từ các kế hoạch chi tiết lớp. Constructor khai báo trông giống như phương thức khai báo — ngoại trừ việc chúng khai báo tên của lớp và không có loại trả về .
Nếu bạn xây dựng những gì bạn đang cố gắng để đạt được ai đó có thể cho bạn biết cách bạn có thể đạt được mục tiêu đó.
public class Const {
private String myVar;
public Const(String s) {
myVar = s;
}
public String getMyString()
{
return myVar;
}
public static void main(String[] args) {
Const myConst = new Const("MyStringHere");
System.out.println(myConst.getMyString());
}
}
Bạn nên tạo một hàm toString() thay vì getMyString(). Vì vậy, bạn có thể thực hiện 'System.out.println (myConst)' – Rhs
Tôi nghĩ rằng cách tốt nhất để tạo ra hiệu ứng mà bạn muốn sẽ được như sau:
public class Const {
private String str;
public Const(String hello) {
str = hello;
}
public String toString() {
return str;
}
public static void main(String[] args) {
System.out.println(new Const("Hello!"));
}
}
này thay thế public String Const()
phương pháp bạn sử dụng trước đó, và bằng cách ghi đè các phương pháp public String toString()
của Object
(Mà tất cả Các lớp Java kế thừa từ) giá trị String của đối tượng được in chính xác khi bạn muốn in đối tượng, vì vậy phương thức chính của bạn vẫn không thay đổi.
Một hàm tạo không thể trả về giá trị vì hàm khởi tạo ngầm trả về ID tham chiếu của đối tượng và vì hàm tạo cũng là phương thức và phương thức không thể trả về nhiều giá trị. Vì vậy, chúng tôi nói một cách rõ ràng constructor không có một giá trị trả về.
Đã có nhiều câu trả lời tuyệt vời. Tôi chỉ muốn thêm rằng, nếu bạn muốn lấy một số mã trả về tách biệt với chính đối tượng như là kết quả của việc gọi một hàm tạo, bạn có thể bọc hàm tạo trong một factory method
, khi tạo, có thể ví dụ làm một số xác nhận dữ liệu trong đối tượng được xây dựng và trả lại một boolean
tùy thuộc vào kết quả.
Để trả lại giá trị từ một hàm tạo - chỉ cần chuyển vào mảng dưới dạng tham số. Để minh họa nguyên tắc:
Test() {
Boolean[] flag = new Boolean[1];
flag[0] = false;
new MyClass(flag);
System.out.println(flag[0]); // Will output 'true'
}
class MyClass {
MyClass(Boolean[] flag) {
// Do some work here, then set flag[0] to show the status
flag[0] = true;
}
}
/************************************************
Put the return value as a private data member, which gets
set in the constructor. You will need a public getter to
retrieve the return value post construction
******************************************************/
class MyClass
{
private Boolean boolReturnVal;
public Boolean GetReturnVal() { return(boolReturnVal); }
MyClass() // constructor with possibly args
{
//sets the return value boolReturnVal
}
public static void main(String args[])
{
MyClass myClass = new MyClass();
if (myClass.GetReturnVal())
{
//success
}
}
}
- 1. Làm thế nào để `({...})` trả về một giá trị?
- 2. Làm cách nào để trả về một giá trị từ một hàm trong một tệp lô?
- 3. Giá trị nào mà một hàm khởi tạo có thể trả về để tránh trả lại giá trị này?
- 4. Làm cách nào để bỏ qua một số giá trị trả về của một hàm MATLAB?
- 5. Làm cách nào để trả về một hàm làm giá trị đầu ra trong MATLAB?
- 6. Làm thế nào để fork() trả về hai giá trị?
- 7. AlertDialog trong một hàm có giá trị trả về
- 8. Tại sao hàm Perl này trả về một giá trị?
- 9. Trả về nhiều hơn một giá trị từ một hàm trong Java
- 10. Hàm Delphi Now() trả về một giá trị sai
- 11. Làm thế nào để có được trả lại một giá trị bằng một hàm callback
- 12. Làm thế nào để có được một giá trị trả về từ một hàm được gọi thông qua NSthread?
- 13. Giá trị trả về Const trong Java
- 14. Làm thế nào để xóa một khóa và trả về giá trị từ một mảng PHP?
- 15. Trả về một giá trị trong Pascal
- 16. Làm thế nào tôi có thể trả về một giá trị từ một chuỗi trong Ruby?
- 17. Làm thế nào để một hàm trong một vòng lặp (trả về một hàm khác) hoạt động?
- 18. Trả về một giá trị với psycopg2
- 19. Làm thế nào để jQuery làm cho giá trị trả về trông giống như một mảng?
- 20. Làm cách nào để tạo một PriorityBinding nếu giá trị trả về là Null?
- 21. QTP: Làm cách nào tôi có thể trả về nhiều Giá trị từ một hàm
- 22. Giá trị trả về từ mã Java
- 23. Làm thế nào để bạn trả về một giá trị mặc định nếu một LINQ cho các đối tượng truy vấn trả về không có giá trị
- 24. Làm cách nào để viết một hàm trả về một hàm khác?
- 25. một hàm khởi tạo trả lại trong java
- 26. Làm thế nào để biết rằng không có kết quả của một hàm có giá trị trả về?
- 27. Làm thế nào để trả về một mảng char được tạo ra trong hàm?
- 28. Làm thế nào để tham khảo giá trị trả về của một perl phụ
- 29. Làm thế nào để trả về một data.frame với một tên đã cho từ một hàm?
- 30. Trả về một giá trị VÀ ném một ngoại lệ?
Hãy xem xét chỉnh sửa tiêu đề của câu hỏi này cho một cái gì đó như "Java: là constructor của tôi ở đây trả về một giá trị?" Tôi có một câu hỏi cụ thể về cách Java trả về các giá trị từ các nhà xây dựng và tôi nghĩ câu hỏi này là chủ đề tổng quát hơn ... Thay vào đó là "Trợ giúp, tôi không thể gán giá trị trả về cho hàm tạo của mình!" – Jan