我正在尝试从扫描仪读取类对象,但我正在
type mismatch: cannot convert from String to otherClass
private class myClass() {
scan = new Scanner(System.in);
int x;
otherClass A;
otherClass B;
A = scan.next();
}
在这种情况下,otherClass
有许多变量,但是我只需要将名称扫描为字符串,这样我就可以将它与类中其他对象的ArrayList
进行比较。
不确定我哪里出错,任何帮助都会非常感激。
答案 0 :(得分:0)
扫描仪对象始终读取字符串。您必须获取scan.next()返回的String对象,然后根据需要将其传递给otherClass对象。 A和B都是otherClass类型(除非otherClass是String的超类),你不能将String对象赋给otherClass类型的引用。
此外,Java约定是大写类名,而不是camelCase它们,所以你应该使用OtherClass。
答案 1 :(得分:0)
// here scan.next() reads the string but cannot be
// convert to the type otherClass.
A = scan.next(); //raise ClassCastException
String
只能转换为Object
类,因为Object
是您在parent
中创建的所有Class
的{{1}}类。
您甚至无法扩展java
类,因为它被声明为String
因此,对于任何final
来说,此Class String
永远不会是parent
因此,otherclass
对象引用只能由String
或String
类加入。
您可以像这样更改代码。
Object
答案 2 :(得分:0)
尝试这样的事情 假设Otherclass有这样的Arraylist。 ArrayList arraylist = new ArrayList(); arraylist.add(scanner.nextInt());
比较arraylist中的字符串和对象
String s1 = scanner.next();
String s2 = otherclass.arraylist.get(0).toString();
的System.out.println(s1.equalsIgnoreCase(S2));
但是你必须覆盖数组列表中的类中的toString()方法。
答案 3 :(得分:0)
你想以这种方式做事很奇怪。
在面向对象语言中,我们使用构造函数初始化实例中的变量。
如果你坚持使用扫描仪在你的OtherClass中输入名字,你最好这样做。
import java.util.Scanner;
class OtherClass {
public String name;
public OtherClass(String name){
this.name = name;
}
}
public class MyClass {
int x;
OtherClass a;
OtherClass b;
public MyClass(){
Scanner scanner = new Scanner(System.in);
this.a = new OtherClass(scanner.next());
this.b = new OtherClass(scanner.next());
// always close resources after use
scanner.close();
}
// testing
public static void main(String args []){
MyClass myClass = new MyClass();
System.out.println("the name in OtherClass a is: "+myClass.a.name);
System.out.println("the name in OtherClass b is: "+myClass.b.name);
}
}