相关疑难解决方法(0)

C++ 0x元组向后存储元素

经过一番调查后,我发现C++ 0x将元素向后存储在元组中.

例如,请使用以下代码:

std::tuple<char, char, char> x('\0', 'b', 'a');
char* y = (char*)&x;
std::cout << sizeof(x) << std::endl;
std::cout << y << std::endl;
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.5.2编译时,我得到以下输出:

3
ab
Run Code Online (Sandbox Code Playgroud)

这最初困惑了我.为什么数据会向后存储?在通过GNU无意识混淆的标头搜索之后,我注意到实现类似于:

template<typename head, typename... tail> class tuple<head, tail...> : public tuple<tail...>
{
  head value;
  ...
};
Run Code Online (Sandbox Code Playgroud)

因为基类包含最后一个元素,所以下一个派生类包含倒数第二个,等等,模板参数的实际顺序是相反的.

当我第一次进入元组时,我认为我可以将它们用于类似函数glInterleavedArrays(),它将顶点数据数组设置为颜色,纹理坐标,法线和点的元组.当然,如果我创建一个元组数组,这些数据必须反向输入,如果你碰巧忘记按正确的顺序放置参数,这可能会导致非常奇怪的错误.

那么这样的事呢?

template<typename... head, typename tail> class tuple<head..., tail> : public tuple<head...>
{
  tail value;
  ...
};
Run Code Online (Sandbox Code Playgroud)

根据GCC 4.5.2:

std::tuple<char, char, char> x('\0', 'b', 'a');
char* y = (char*)&x;
std::cout << sizeof(x) << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ memory tuples c++11 stdtuple

6
推荐指数
2
解决办法
933
查看次数

为什么我们在Java中使用接口引用类型?

我即将参加我的第一个面向对象编程课程的期末考试,但我仍然不了解多态性的概念.

假设我有一个抽象类"Vehicle",这个类有一个名为"Aircraft"的子类.我的问题是,这两个代码有什么不同?

Aircraft Jetplane = new Aircraft();
Run Code Online (Sandbox Code Playgroud)

Vehicle Jetplane = new Aircraft();
Run Code Online (Sandbox Code Playgroud)

java polymorphism

6
推荐指数
2
解决办法
2707
查看次数

工厂设计模式和关键字'新'

我是一名初学者.我知道OOP的基础知识,但我还不知道"最佳实践".例如,一个继续出现在编程中的范例是"抽象工厂"设计模式,这似乎相当简单.其背后的一个关键意图是避免使用关键字"new",因为它被认为是有害的.我在编程课程中从未听过这个.有人可以详细阐述这一点吗?为什么我们要避免以这种形式实例化对象?

oop design-patterns

6
推荐指数
1
解决办法
2176
查看次数

Queue &lt;Integer&gt; q =新的LinkedList &lt;Integer&gt;()

这是“如何在Java中实例化Queue对象?”的答案。

Queue是一个接口。除了通过匿名内部类,您不能直接实例化接口。通常,这不是您要为集合执行的操作。而是选择一个现有的实现。例如:

队列q = new LinkedList();

要么

队列q = new ArrayDeque();

通常,您可以根据您感兴趣的性能和并发特性来选择集合实现。

这是如何运作的?接口Queue实施LinkedList意味着什么?

这是否意味着对象可以在FIFO中(先进先出顺序)出队,并且调用链表方法就q可以了?

java queue data-structures

6
推荐指数
1
解决办法
1万
查看次数

在列表列表中找到最小大小的列表

我有一个列表列表,我想使用java Stream返回具有最小大小的列表.

这是我试过的:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Example {
   public static void main( String[] args )  {
         ArrayList<Integer> list1 = new ArrayList<>();
         list1.add(0);list1.add(2);list1.add(3);

         ArrayList<Integer> list2 = new ArrayList<>();
         list2.add(0);list2.add(2);list2.add(3);list2.add(4);

         System.out.println( getTheMinList(list1,list2).size());    
   }

   public static ArrayList<Integer> getTheMinList(ArrayList<Integer>... lists) {
         return Arrays.stream(lists)
                      .map(list->list.size())
                      /*here i stoped*/
                ;
   }
}
Run Code Online (Sandbox Code Playgroud)

程序应该打印,3因为第一个列表具有最小大小.

请注意,我无法更改getTheMinList()的签名.有人可以给我一个提示吗?

java java-stream

6
推荐指数
1
解决办法
379
查看次数

有什么理由使用接口(Java EE或Spring和JPA)

大多数ј2ее(spring和JPA)类都设计有接口.除了继承任何技术原因有?像dynaimc proxy或aop,我需要更多技术细节

public interface UserDAO {
   void delete();
   void update();
   void save();
   List<User> get();
}

public class UserDAOImpl implements UserDAO {
   public void delete(){}
   public void update(){}
   public void save(){}
   public List<User> get(){}
}
Run Code Online (Sandbox Code Playgroud)

spring design-patterns java-ee

5
推荐指数
3
解决办法
4821
查看次数

PHP为什么在构造中启动数据库连接不好?

当我遇到这段代码时,我正在阅读一篇博文:

<?php
include_once 'config.php';
class User
{
//Database connect 
public function __construct() 
{
$db = new DB_Class();
}
Run Code Online (Sandbox Code Playgroud)

在评论中有人发布了以下内容:

永远不要在构造函数中初始化db连接

但与所有评论战士一样,他们从来没有给出理由?为什么这是错误的或不好的做法?

php object

5
推荐指数
1
解决办法
142
查看次数

警告避免使用'HashMap'等实现类型; 改为使用界面

我在声纳上收到这个警告:

避免使用像'HashMap'这样的实现类型; 改为使用界面

这是什么意思?

我收到此警告的类如下:

class A {
   private HashMap<String, String> map=new HashMap<String, String>();

   //getters and setters

}
Run Code Online (Sandbox Code Playgroud)

请,我想要适当的解决方案,以避免在声纳上发出警告.

java

5
推荐指数
2
解决办法
1万
查看次数

为什么分离界面和实现?

在生产代码中,我经常看到如下定义的类:

public interface SomeComponent { // Some methods }
public class SomeComponentImpl implements SomeComponent { // Some methods}

public interface SomeComponentV2 extends SomeComponent { // Some methods }
public class SomeComponentV2Impl extends SomeComponentImpl implements SomeComponent { // Some methods }
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下我们要分离接口及其实现?

或者这样说,为什么简单地有一个基类,让V2扩展/覆盖V1如下:

public class SomeComponent { // Some methods }
public class SomeComponentV2 extends SomeComponent 
{
  // Override methods for reimplementation
  // Add new methods for new features.
}
Run Code Online (Sandbox Code Playgroud)

java architecture design-patterns

5
推荐指数
1
解决办法
2151
查看次数

什么时候我们应该通过接口的类型来引用一个对象?

在下面的代码中,我有两种不同的方法来实例化类的对象B.

public interface A {}

public class B implements A {}

public static void main(String[] args)
{
    A test1 = new B();
    B test2 = new B();  
}
Run Code Online (Sandbox Code Playgroud)

变量test1和test2有什么区别?
我何时应该使用Interface类型(type1)进行实例化,何时不应该?

java

5
推荐指数
0
解决办法
55
查看次数