鉴于 Java 类的这种组合:
public class OuterClass
{
public String field01;
public int field02;
public InnerClass innerField
// ...getters, setters
public class InnerClass
{
public int innerField01;
public BigDecimal innerField02;
// ...getters, setters
Run Code Online (Sandbox Code Playgroud)
我想按外部和内部字段对它们进行排序。现在,给定 a List<OuterClass> list,我可以轻松地对其进行排序,例如field01:
Collections.sort(list, Comparator.comparing(OuterClass::getField01));
Run Code Online (Sandbox Code Playgroud)
但我可以按哪种方式排序InnerClass.innerfield.innerfield01呢?我试过
Collections.sort(list, Comparator.comparing(OuterClass::InnerField::innerField01));
Run Code Online (Sandbox Code Playgroud)
以及其他一些方法,但都没有成功。也许我应该以某种方式使用OuterClass::new,但我不知道如何使用。
我有一个包含内部类的类,它看起来有点像这样:
class Foo
{
class Bar
{
public:
void update(const Foo& f)
{
//Updates using public getters of Foo
}
};
public:
void doStuff() const
{
b_.update(*this);
}
private:
Bar b_;
};
Run Code Online (Sandbox Code Playgroud)
该线路b_.update(*this)目前给我错误cannot convert 'this' pointer from 'const Foo::Bar' to 'Foo::Bar &'
这是为什么?该update方法的参数是 type const Foo&,这意味着它不可能修改Foo对象,如果它愿意的话。这不应该满足 const 方法doStuff吗?
我试过在谷歌上搜索一个有同样问题的人一个小时,但我似乎无法正确地用词来找到类似的问题。
我正在尝试做的事情是可能的,还是我需要改变我的设计?
下面的代码工作正常,我分别为外部类和内部类创建对象并传递参数
class Student:
def __init__(self,name,rollno):
self.name = name
self.rollno = rollno
def show(self):
print(self.name,self.rollno)
#self.lap.show()
class Laptop: #inner class
def __init__(self,brand,cpu'):
self.brand = brand
self.cpu = cpu
def show(self):
print(self.brand,self.cpu)
s1 = Student('Ram',21)
lap1 =s1.Laptop('Dell','i3')
lap1.show()
Run Code Online (Sandbox Code Playgroud)
在第二个代码中,我在外部(学生)类中创建了内部类(笔记本电脑)对象。那么,我们如何将参数传递给内部类呢?
class Student:
def __init__(self,name,rollno):
self.name = name
self.rollno = rollno
self.lap = self.Laptop() #lap is the obj of a inner class
def show(self):
print(self.name,self.rollno)
self.lap.show()
Run Code Online (Sandbox Code Playgroud)
我尝试使用 self.lap = self.Laptop(brand,cpu),分配参数并以不同的方式传递参数,但没有一个对我有用。有什么办法可以让我传递论据吗?
例子:
require "fluent/plugin/output"
module Fluent::Plugin
class Outer < Fluent::Plugin::Output
@outer_var = "Hello from outer variable"
class Inner
def initialize()
puts "@outer_var", @outer_var # nil
log.info "Hello from inner initialize" # undefined local variable or method log
outer_method() # undefined method `outer_method' for #<Outer::Inner:0x00007fd2100452b0> (NoMethodError)
end
end # Inner
def initialize()
Inner.new()
log.info "Hello from outer initialize" # works
end
def outer_method
puts "Hello from outer method"
end
end # Outer
end # Fluent::Plugin
Run Code Online (Sandbox Code Playgroud)
如何使内部类可以访问外部变量和方法?这里的示例显示了如何定义内部/外部类,但没有显示如何访问外部类。我知道 Ruby 中不存在内部/外部类的概念,根据这个答案。在仍然是模块一部分的情况下使用 …
内部类总是在外部类中.如果我们删除了外部类,那么内部类也将被销毁.我不关心内存释放,我只是在思考这个概念.这与构图的概念相同.在这种情况下,内部类必须是现实世界中对象的组合关系的示例.
简而言之,我如何将内在类与现实生活中的面向对象联系起来?通过这个,我的意思是一个非技术性的例子; 也许是与动物或电子游戏相关的隐喻?
如果构造函数是组合的一个很好的例子,那么在面向对象中涉及内部类的基本需求是什么?
以下示例是否准确?
例如
大学是外课.
教师是内在的阶级.
我确实理解面向对象,但我发现很难将内部阶级与现实世界联系起来.你能给我一些指示吗?
虽然这是一个很小的问题要问,想要了解这种奇怪的行为!以下是代码和正在讨论的代码的行为(通过控制台输出).
public class EmptyBracesWithinClass {
public static void main(String[] args) {
EmptyBraces eb = new EmptyBraces();
System.out.println("SYSO within main() method");
}
}
class EmptyBraces {
{
System.out.println("SYSO within empty braces");
}
public EmptyBraces() {
System.out.println("SYSO within constructor() method");
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
SYSO within empty braces
SYSO within constructor() method
SYSO within main() method
Run Code Online (Sandbox Code Playgroud)
这里的问题是,为什么在对象实例创建EmptyBraces类期间首先执行空括号内的代码片段(尽管它从未声明为STATIC显式)?
为什么我必须Thread在内部类中扩展而不是实现Runnable
以下代码有效: -
class Outer{
Inner innerObj;
Outer(){
innerObj = new Inner();
}
public void begin(){
innerObj.start();
}
class Inner extends Thread{
Inner(){
System.out.println("Thread initialized!");
}
public void run(){
System.out.println("Thread running!");
}
}
}
class Driver{
public static void main(String[] args){
Outer o1 = new Outer();
o1.begin();
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用a Runnable会导致编译错误: -
class Outer{
Inner innerObj;
Outer(){
innerObj = new Inner();
}
public void begin(){
innerObj.start();
}
class Inner implements Runnable{
Inner(){
System.out.println("Thread initialized!");
}
public …Run Code Online (Sandbox Code Playgroud) 我想知道如何通过纠正错误来执行这个java程序.
代码是:
import java.io.*;
class start
{
public static void main(String args[])
{
System.out.println("STARTING JAVA PROGRAM");
}
}
class finish
{
System.out.println("FINISH");
}
Run Code Online (Sandbox Code Playgroud)
执行此程序产生的错误是:
D:\Downloads\PRO>javac start.java
start.java:10: error: <identifier> expected
System.out.println("FINISH");
start.java:10: error: illegal start of type
System.out.println("FINISH");
Run Code Online (Sandbox Code Playgroud)
我们可以在java程序中允许两个类吗?
任何人都可以帮助我.
不field应该在第 50 行 undefined 吗?我的理解是内部嵌套类对外部类没有可见性,正如我在第 65 行遇到的那样......似乎有点不一致,我希望更好地了解外部嵌套类的可见性以避免任何混淆在将来。
"""######################################### Imports ############################################"""
import turtle
import time
import functools
"""######################################### Key press ##########################################"""
def key_space(): # Resets Level
field.setLevel()
def key_p(): # Skips Level
field.nextLevel()
def key_k(): # For making levels
print([(b.x,b.y) for b in field.getBoxes()])
"""######################################## Interface(s) ########################################"""
def stamp(self): # Interface for drawing polygons.
turtle.goto(self.canvasX+field.offset[0],self.canvasY+field.offset[1])
turtle.shape(self.shape)
turtle.color(self.color)
turtle.stamp()
def frameBoiler(func): #
@functools.wraps(func)
def wrapper_frame_boiler(*args,**kwargs):
turtle.clear()
#turtle.getscreen().bgpic('Untitled.png')
r = func(*args, **kwargs)
turtle.update()
time.sleep(0.05)
return r
return wrapper_frame_boiler
"""######################################### Game Logic …Run Code Online (Sandbox Code Playgroud) python abstract-class nested inner-classes undefined-reference
java ×5
class ×2
oop ×2
python ×2
c++ ×1
comparator ×1
composition ×1
fluentd ×1
inheritance ×1
interface ×1
nested ×1
python-3.x ×1
ruby ×1
sorting ×1