Error:(52, 75) not found: value TCLIService public abstract class ThriftCLIService extends AbstractS

本文解决在将Maven编译后的Spark 2.2.0的hive-thriftserver模块导入IntelliJ IDEA时遇到的错误。通过将spark/sql/hive-thriftserver/src/gen/java目录标记为源代码根目录,可以解决找不到TCLIService的问题。

maven编译完spark2.2.0,

然后导入maven项目File-->new->Import project from external model-->maven

方便hive-thriftserver的代码,记得select profiles 页勾选hive-thriftserver

导入maven项目到idea 出现错误

Error:(52, 75) not found: value TCLIService public abstract class ThriftCLIService extends AbstractService implements TCLIService.Iface, Runnable {

解决方案:

spark\sql\hive-thriftserver\src\gen\java右键中点Mark Directory as->Sources Root即可

/usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Drawable case class Point(var x:Double,var y:Double) extends Drawable{ ^ defined trait Drawable /usr/local/scala/mycode/exercise2-2.scala:12: error: not found: type Point abstract class Shape(var point:Point) extends Drawable{ ^ /usr/local/scala/mycode/exercise2-2.scala:13: error: not found: type Point def moveTo(epoint:Point){ ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Shape class Line(var point1:Point,var point2:Point) extends Shape(point1){ ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Point class Line(var point1:Point,var point2:Point) extends Shape(point1){ ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Point class Line(var point1:Point,var point2:Point) extends Shape(point1){ ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: no arguments allowed for nullary constructor Object: ()Object class Line(var point1:Point,var point2:Point) extends Shape(point1){ ^ /usr/local/scala/mycode/exercise2-2.scala:12: error: not found: type Point override def moveTo(point:Point){ ^ /usr/local/scala/mycode/exercise2-2.scala:25: error: not found: value Point point1 = Point(newPoint1X,newPoint1Y) ^ /usr/local/scala/mycode/exercise2-2.scala:26: error: not found: value Point point2 = Point(newPoint2X,newPoint2Y) ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Shape class Circle(var point:Point,var r:Double) extends Shape(point){ ^ /usr/local/scala/mycode/exercise2-2.scala:11: error: not found: type Point cla这是运行结果 帮我查看一下哪里出错
最新发布
03-31
<think>嗯,用户遇到了Scala编译错误,涉及到多个“not found: type”的错误,比如Drawable、Point、Shape等。首先,我需要仔细分析错误信息,看看问题出在哪里。 首先看第一个错误:Point类继承Drawable时提示找不到类型Drawable,但用户提到“defined trait Drawable”。这说明Drawable可能是在后面定义的,而Scala是按顺序编译的,所以如果Point类在Drawable之前定义,就会找不到这个trait。应该检查Drawable的定义位置,确保它在所有使用它的类之前声明。 接下来,Point类的定义在case class中使用了var参数,这可能没问题,但后续的错误提到找不到Point类型,比如在Shape类的构造参数中。这可能是因为Point类没有正确导入或者定义在同一个文件中,或者存在作用域问题。如果Point和Shape在同一个文件中,那么可能是顺序问题,Shape在Point之前被引用,导致编译器找不到Point的定义。 然后,Line类继承Shape时,提示找不到Shape,同样可能是顺序问题。另外,Line类的构造器参数中引用了Point,同样需要确保Point已经定义。还有一个错误是“no arguments allowed for nullary constructor Object”,这可能是因为Shape的构造函数需要参数,而Line在继承时没有正确传递参数。例如,Shape可能有一个抽象类,需要具体的参数,而Line在extends时可能没有正确初始化。 再看moveTo方法中的Point参数,同样需要Point已经定义。后面的Point(newPoint1X, newPoint1Y)报错,可能是因为没有使用new关键字或者Point是case class,但构造时可能需要使用new,或者用户误用了Point的伴生对象。不过case class通常会自动生成伴生对象的apply方法,所以这里可能问题在于作用域中没有Point的伴生对象,或者Point没有被正确导入。 另外,用户可能在同一个文件中混合了多个类定义,但顺序不对,导致前面的类引用后面的类或trait。例如,Drawable应该在Point和Shape之前定义,Point在Shape之前,Shape在Line和Circle之前。 可能的解决方案包括: 1. 调整类定义的顺序,确保依赖关系正确。比如先定义Drawable trait,然后定义Point,接着是Shape,最后是Line和Circle。 2. 检查是否有拼写错误,比如Drawable的大小写是否正确,或者是否有其他命名错误。 3. 确保case class Point的伴生对象存在,或者在创建Point实例时正确使用new关键字(不过case class通常不需要new)。 4. 检查Shape类的构造函数是否正确,是否抽象类需要具体的实现方式,比如参数传递是否正确。 比如,如果Drawable的定义在Point之后,那么编译时会找不到。所以需要先定义trait Drawable,再定义Point extends Drawable,接着是Shape extends Drawable,再然后是Line和Circle继承Shape。 另外,错误中提到“no arguments allowed for nullary constructor Object”可能是因为在继承Shape时,传递参数的方式不正确。例如,Shape的构造函数需要一个Point参数,而Line在继承时是否正确传递了这个参数。例如,Shape的构造可能需要super的调用,或者在抽象类中如何处理参数。 可能的代码结构问题: 用户可能将Drawable定义在Point之后,导致Point在extends时找不到Drawable。同样,Shape可能在Line和Circle之后定义,导致继承时找不到Shape。此外,Point可能被定义在后续的位置,导致前面的类无法识别。 总结问题原因: 1. 类型定义的顺序错误,导致前面的类无法识别后面定义的trait或类。 2. 可能Drawable、Point、Shape等定义的位置不正确,需要调整顺序。 3. 在创建Point实例时,可能没有正确使用伴生对象的apply方法,或者存在其他语法错误。 因此,解决方案应该是调整代码顺序,确保所有依赖项先定义后使用,并检查构造函数的正确性。</think>这个编译错误主要由代码结构顺序和类型可见性问题导致。让我们逐步分析并解决: $\boxed{\text{问题根源分析}}$ 1. $\boxed{\text{类型定义顺序错误}}$:Scala编译器按从上到下的顺序解析代码,当引用尚未定义的类/特质时会出现`not found: type`错误 2. $\boxed{\text{构造函数参数传递错误}}$:继承抽象类时未正确处理构造函数参数 3. $\boxed{\text{对象实例化语法错误}}$:case class实例化未正确使用伴生对象 $\boxed{\text{解决方案分步说明}}$ $\boxed{\text{第1步 调整定义顺序}}$ ```scala // 先定义最基础的trait trait Drawable // 再定义依赖Drawable的类 case class Point(var x: Double, var y: Double) extends Drawable // 接着定义抽象类(注意参数传递) abstract class Shape(var point: Point) extends Drawable { def moveTo(newPoint: Point): Unit = { point = newPoint } } // 最后定义具体形状类 class Line(var point1: Point, var point2: Point) extends Shape(point1) { // 实现具体方法... } class Circle(var center: Point, var radius: Double) extends Shape(center) { // 实现具体方法... } ``` $\boxed{\text{第2步 修正构造函数}}$ ```diff - class Line(...) extends Shape(point1) // 错误:Shape需要Point参数 + class Line(p1: Point, p2: Point) extends Shape(p1) { // 正确传递参数 var point1 = p1 var point2 = p2 } ``` $\boxed{\text{第3步 正确实例化case class}}$ ```diff - point1 = Point(x, y) // 错误:缺少new关键字(仅适用于普通class) + point1 = Point(x, y) // 正确:case class自动生成伴生对象apply方法 ``` $\boxed{\text{完整修正建议}}$ ```scala trait Drawable case class Point(var x: Double, var y: Double) extends Drawable abstract class Shape(var location: Point) extends Drawable { def moveTo(newLocation: Point): Unit = { location = newLocation } } class Line(start: Point, end: Point) extends Shape(start) { var startPoint: Point = start var endPoint: Point = end override def moveTo(newLocation: Point): Unit = { val offsetX = newLocation.x - location.x val offsetY = newLocation.y - location.y startPoint = Point(startPoint.x + offsetX, startPoint.y + offsetY) endPoint = Point(endPoint.x + offsetX, endPoint.y + offsetY) super.moveTo(newLocation) } } class Circle(center: Point, var radius: Double) extends Shape(center) { override def moveTo(newCenter: Point): Unit = { super.moveTo(newCenter) } } ``` $\boxed{\text{关键注意事项}}$ 1. 定义顺序应遵循:特质(trait) → 基础类 → 抽象类 → 具体类 2. 使用case class时直接使用`ClassName(...)`创建实例 3. 继承抽象类时需确保正确传递构造函数参数 4. 使用var时注意状态变更的可见性(建议优先使用val)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值